import requests from lxml import etree headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57' } url='https://pic.netbian.com/' page_text= requests.get(url=url,headers=headers).text tree = etree.HTML(page_text) li_list=tree.xpath('//div[@class="slist"]/ul/li') for li in li_list: pic='https://pic.netbian.com'+li.xpath('./a/img/@src')[0] name=li.xpath('./a/img@alt')[0]+'.jpg' print(pic,name)
时间: 2023-12-21 08:04:36 浏览: 191
这段代码是一个Python程序,它使用requests和lxml库来从网站https://pic.netbian.com/获取数据,并使用XPath从HTML页面中提取图像的URL和名称。这里的问题在于,XPath表达式'.//a/img@alt'中缺少'/',正确的表达式应该是'./a/img/@alt'。这个错误可能导致名称提取失败。
相关问题
解决一下以下代码报错的import requests from lxml import etree url = 'https://www.shanghairanking.cn/institution' 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' } res = requests.get(url=url,headers=headers) print(res.status_code) html = etree.HTML(res.text) lis = html.xpath("//*[@id="__layout"]/div/div[2]/div[2]/div[1]") print(len(lis))
这段代码有一个小错误,就是在xpath的语句中双引号没有转义,需要改成单引号。修改后的代码如下:
```python
import requests
from lxml import etree
url = 'https://www.shanghairanking.cn/institution'
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'
}
res = requests.get(url=url, headers=headers)
print(res.status_code)
html = etree.HTML(res.text)
lis = html.xpath('//*[@id="__layout"]/div/div[2]/div[2]/div[1]')
print(len(lis))
```
这样就可以正确运行了,输出页面中指定元素的数量。
import requests from lxml import etree url='https://www.bilibili.com/video/BV1mF411R7A3/?spm_id_from=333.1007.tianma.1-2-2.clic\ k&vd_source=fc4e29fa3f37225d514b91f0ce9df8a0' headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\ (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.56'} r=requests.get(url,headers=headers) html=etree.HTML(r.text) result=html.xpath('//span[@class="reply-content"]/text()') with open('bilibili.txt','wb') as f: f.write(result)
这段代码的作用是使用 `requests` 库发送一个 GET 请求,获取指定 URL 的网页内容,并使用 `lxml` 库解析网页内容。然后,从解析后的 HTML 中提取出所有 class 为 "reply-content" 的 span 元素,并将其文本内容写入名为 "bilibili.txt" 的文件中。
然而,这段代码存在一些问题:
1. `result` 变量是一个包含文本内容的列表,无法直接写入文件。你需要将列表中的文本内容转换为字符串,然后再写入文件。
2. 打开文件时使用了 `'wb'` 模式,这是二进制写入模式。但我们需要将文本内容写入文件,应该使用 `'w'` 模式。
修复后的代码如下:
```python
import requests
from lxml import etree
url = 'https://www.bilibili.com/video/BV1mF411R7A3/?spm_id_from=333.1007.tianma.1-2-2.click&vd_source=fc4e29fa3f37225d514b91f0ce9df8a0'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.56'
}
r = requests.get(url, headers=headers)
html = etree.HTML(r.text)
result = html.xpath('//span[@class="reply-content"]/text()')
with open('bilibili.txt', 'w', encoding='utf-8') as f:
for content in result:
f.write(content + '\n')
```
修复后的代码会将提取到的文本内容逐行写入文件,并使用 UTF-8 编码保存。
阅读全文
相关推荐
















