import csv import requests from lxml import etree #爬取的页面 url = "https://movie.douban.com/explore" #定义请求头 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" } #获取html字符串 response = requests.get(url,headers=headers) content = response.content.decode('utf8') #将html字符串解析 html = etree.HTML(content) #Xpath获取总框架 trs = html.xpath('//div[@class="drc-subject-info"]') #定义一个列表来存储数据 mv_data = [] #for循环遍历总框架,for循环内部的.指的是当前框架下的内容匹配 for tr in trs: #定义一个集合存储 eg = {} #在上面的框架下爬取电影的标题 title = tr.xpath('./div[@class="drc-subject-info-title"]/span/text()')[0].strip() #在上面的框架下爬取电影的年份、类型、主演 information = tr.xpath('./div[@class="drc-subject-info-title"]/div[@class="drc-subject-info-subtitle"]/text()')[0].strip() #在上面的框架下爬取电影的评分 score = tr.xpath('./div[@class="drc-rating drc-subject-info-rating m"]/span[@class="drc-rating-num"]/text()')[0].strip() #定义一个字段来存储key,value的结构 eg = { "title":title, "information":information, "score":score } #在hots列表中添加eg字典的内容 mv_data.append(eg) with open("mv_data.csv","a",encoding="utf8",newline="") as f: #设置字段名(列表名) filenames = ['title','information','score'] #定义开头 writer = csv.DictWriter(f,fieldnames=filenames) #写入开头 writer.writeheader() # 打印 print(mv_data) #内容 writer.writerows(mv_data) #打印写入完成 print("数据已写入")
时间: 2024-04-06 15:32:14 浏览: 13
这段代码的功能是爬取豆瓣电影页面上的电影标题、年份、类型、主演和评分,并将这些信息存储到一个列表中,最后将列表中的数据写入到一个名为"mv_data.csv"的csv文件中。
在代码的第一行,导入了csv、requests、etree等模块,这些模块提供了对csv文件操作、网络请求和解析html的功能。
接着,定义了一个url变量来存储要爬取的页面地址,和一个headers变量来存储请求头信息,用于伪装成浏览器请求页面。
然后,通过requests.get()方法请求页面,并将返回的二进制数据转换为utf8格式的字符串。
接下来,使用lxml库的etree.HTML()方法将html字符串解析为一个树形结构,方便之后的xpath匹配。
然后,使用xpath匹配出页面中所有电影的总框架,并遍历每一框架,匹配出电影的标题、年份、类型、主演和评分,并将这些信息存储到一个字典中,最后将字典添加到mv_data列表中。
最后,使用csv模块的DictWriter()方法将数据写入到csv文件中,首先定义字段名(列表名),然后写入开头,接着将mv_data列表中的数据写入到文件中,最后输出提示信息。
需要注意的是,文件打开方式应该是"a",表示以追加的方式写入数据,这样可以保证之前写入的数据不会被覆盖。另外,csv文件的编码应该是utf8,并且在写入数据时需要指定newline参数为"",以防止写入的数据出现额外的换行符。
相关问题
import requests from lxml import etree url="https://www.80142.com/txt/82776.html" html=requests.get(url) print(html)出现requests not get
这个问题可能是因为您没有正确安装 requests 库。请尝试在命令行中使用以下命令安装 requests 库:
```
pip install requests
```
如果您已经安装了 requests 库,那么可能是因为您的代码中出现了其他问题。请检查您的代码是否正确导入了 requests 库,并且 URL 是否正确。另外,您的代码中缺少换行符,请注意格式。下面是您的代码的修改版:
```
import requests
from lxml import etree
url = "https://www.80142.com/txt/82776.html"
html = requests.get(url)
print(html)
```
爬取 这个网页 https://movie.douban.com/top250的title怎么写
以下是Python代码示例:
```python
import requests
from bs4 import BeautifulSoup
url = "https://movie.douban.com/top250"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
titles = soup.select(".hd > a")
for title in titles:
print(title.text.strip())
```
解释:
1. 导入requests和BeautifulSoup模块。
2. 指定目标网页的URL。
3. 使用requests模块发送GET请求,并获取响应。
4. 使用BeautifulSoup模块解析HTML文档。
5. 使用CSS选择器选择网页中所有class属性为hd的元素下的所有a元素。
6. 遍历所有a元素,并输出其文本内容,即电影名称。strip()函数用于去除文本中的空格和换行符。