1、使用requests模块提取HTML页面文本 1.1、示例,获取一个网页文本 import requests url='http://www.baidu.com' try: res = requests.get(url, timeout=30) res.raise_for_status() res.encoding = 'utf-8' except Exception as e: print('未能获取页面:', e) else: print(res.text) 1.2、requests.get(url[, timeour=n])方法 向指定的url发送一个HTTP的GET请求,获取网页。返回一个Response对象 1.3、Response对象的方法 raise_for_status(),如果响应状态不是200,抛出异常 json(), 解析JSON数据 1.4、Response对象的属性 encoding, 设置或读取响应内容的编码 text, 响应内容的字符串表示 content, 响应内容的二进制表示 status_code,HTTP请求的返回状态。200表示成功,404失败,418表示反爬虫 1.5、将上面得到的网页存入一个html文件,然后显示到浏览器上,观察效果。 提取到的页面,可能缺少图片资源和css资源,在浏览器上的显示和网站直接显示的效果会不同。
时间: 2023-07-14 13:13:12 浏览: 73
可以使用Python的文件操作将获取到的网页文本存入一个html文件中,然后使用webbrowser模块打开该文件,代码示例如下:
```
import requests
import webbrowser
url = 'http://www.baidu.com'
try:
res = requests.get(url, timeout=30)
res.raise_for_status()
res.encoding = 'utf-8'
except Exception as e:
print('未能获取页面:', e)
else:
with open('baidu.html', 'w', encoding='utf-8') as f:
f.write(res.text)
webbrowser.open('baidu.html')
```
执行该代码后,会在当前目录生成一个baidu.html文件,并自动打开该文件。在浏览器中可以观察到百度首页的效果。请注意,该页面可能缺少图片资源和css资源,因此显示效果可能会与直接访问百度网站的效果不同。
相关问题
解决以下脚本乱码的问题: from pyquery import PyQuery as pq doc = pq(url='http://www.baidu.com') print(doc('head'))
您好!要解决脚本乱码的问题,可以尝试设置解码方式为UTF-8,可以按照以下步骤进行修改:
1. 导入`requests`库,并使用`requests.get()`方法获取网页内容。
2. 将获取到的网页内容使用`.content.decode('utf-8')`方法进行解码。
3. 使用`PyQuery`解析解码后的网页内容。
下面是修改后的代码示例:
```python
import requests
from pyquery import PyQuery as pq
response = requests.get('http://www.baidu.com')
content = response.content.decode('utf-8')
doc = pq(content)
print(doc('head'))
```
通过以上修改,您应该能够解决脚本乱码的问题。如果还有其他问题,请随时提问!
帮我优化一下代码:import requests from lxml import html url = "https://www.baidu.com" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } response = requests.get(url, headers=headers) html_tree = html.fromstring(response.content) titles = html_tree.xpath('//ul[@class="s-hotsearch-content"]/li/a/text()') print(titles)
以下是对给定代码的优化建议:
1. 可以将导入的库放在一起,提高代码的可读性。
2. 可以使用更具体的XPath路径表达式来获取标题,以提高代码的准确性。
3. 可以将获取标题的逻辑提取为一个函数,以便复用和测试。
4. 可以添加适当的错误处理机制,防止因异常情况导致程序中断。
下面是优化后的代码示例:
```python
import requests
from lxml import html
def get_titles(url):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status() # 检查请求是否成功
html_tree = html.fromstring(response.content)
titles = html_tree.xpath('//ul[@class="s-hotsearch-content"]/li/a/text()')
return titles
except requests.exceptions.RequestException as e:
print("请求出错:", e)
return []
url = "https://www.baidu.com"
titles = get_titles(url)
print(titles)
```
通过将获取标题的逻辑封装为函数,并添加了错误处理机制,可以提高代码的可读性和健壮性。这样,在其他地方需要获取标题时,只需调用该函数即可。