1、安装lxml库(解析库)
windows:pip install lxml
linux:pip install lxml
安装成功是这样的。
2、想要获取“豆瓣电影250”这个标题,同时想要爬取这个网页的每个电影的名称以及它的评分和评价人数,并将所有的单个数据列入一个大的列表中。
from lxml import etree
import requests
import re
html=requests.get("https://movie.douban.com/top250").text
selector=etree.HTML(html)
#获取文档的标题“豆瓣电影250”
title=selector.xpath("/html/head/title/text()")[0].strip("\n")
#name=selector.xpath("//div[@class="hd"]/a/span[1]/text()")
#设置一个所有的电影列表
Allmovieslist=[]
Lis=selector.xpath('//ol[@class="grid_view"]/li')
for oneselector in lis:
name=oneselector.xpath("div/div[2]/div[@class="hd"]/a/span[1]/text()")[0]
star=oneselector.xpath("div/div[2]/div[@class="bd"]/div/span[2]/text()")[0]
num=oneselector.xpath("div/div[2]/div[@class="bd"]/div/span[4]/text()")[0]
num=re.findall("(.*?)人评价",num)[0]
onemovielist=[name,star,num] #设置小的电影列表,将一个电影的评分,名称以及评价人数放在一个小列表中,在将网页中的所有电影都爬取放入一个大的列表中,方便查看
Allmovieslist=Allmovieslist.append(onemovielist)
print(Allmovieslist)
这样的操作虽然可以爬取数据,但是很容易被封ID,为了解决这个问题,下面我们采取这样的方式爬取。
找到network->doc->top250->useragent(复制后面的值)
from lxml import etree
import requests
import re
#设置一个字典myheaders
myheaders={"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.3 "}
url="https://movie.douban.com/top250"
#爬取数据只需要知道第二页第三页的网址即可,把网址存入url中
flag=True
Allmovieslist=[]
while flag:
html=requests.get("https://movie.douban.com/top250").text
selector=etree.HTML(html)
Lis=selector.xpath('//ol[@class="grid_view"]/li')
for oneselector in Lis:
name=oneselector.xpath("div/div[2]/div[@class='hd']/a/span[1]/text()")[0]
star=oneselector.xpath("div/div[2]/div[@class='bd']/div/span[2]/text()")[0]
num=oneselector.xpath("div/div[2]/div[@class='bd']/div/span[4]/text()")[0]
num=re.findall("(.*?)人评价",num)[0]
onemovielist=[name,star,num] #设置小的电影列表,将一个电影的评分,名称以及评价人数放在一个小列表中,在将网页中的所有电影都爬取放入一个大的列表中,方便查看
Allmovieslist=Allmovieslist.append(onemovielist)
try:
next_url=selector.xpath("//span[@class='next']/a/@herf")[0]
if next_url:#防止爬取到网页的最后一页发生报错
url="https://movie.douban.com/top250"+next_url
expect:
flag=False
print(Allmovieslist)
小可爱们快去亲手试试吧!!,感受一下爬虫的魅力吧,本来准备写BeautifulSoupy以及多线程爬虫的代码的,但是我不怎么用,害怕会误导大家!最近的任务就是上网课学机器学习+数据库+用python写网络爬虫的第三章啦!!1
大家要加油啊啊啊啊!!!!