一、爬虫的介绍及爬虫环境的安装:
1.爬虫简介:
即网络爬虫,是一种自动获取网页内容的程序。是搜索引擎的重要组成部分,因此搜索引擎优化很大程度上就是针对爬虫而做出的优化。
2.爬虫的基本工作流程及框架:
1.首先选取一部分精心挑选的种子URL;
2.将这些URL放入待抓取URL队列;
3.从待抓取URL队列中取出待抓取在URL,解析DNS,并且得到主机的ip,并将URL对应的网页下载下来,存储进已下载网页库中。此外,将这些URL放进已抓取URL队列。
4.分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环。
3.接下来需要爬取的豆瓣电影排行榜网页界面为:
4.人工操作步骤:
1.获取电影信息的网页;
2.找到要评分信息的位置;
3.复制、保存我们想要的评分数据。
5.爬虫操作步骤:
1.请求并下载电影页面信息;
2.解析并定位评分信息;
3.保存评分数据。
下面我们就使用requests和xpath来爬取豆瓣电影中的“电影名”、“导演”、“演员”、“评分”等信息。
6.爬虫前python环境的安装:
打开cmd,输入以下指令:
pip install requests
pip install lxml
二、正式开始爬虫的步骤:
1.导入模块:
2.获取豆瓣电影目标网页并解析:
豆瓣电影排行榜的网址为:
https://movie.douban.com/chart
首先设置headers,伪装成浏览器 #一些网站会设置一些反爬策略来限制爬取数据,所以就需要让爬虫伪装成浏览器取爬取数据
设置url为想爬取的网址
然后用requests.get()方法获取页面的text,
然后用etree.HTML()来解析下载的页面数据”data“
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36' #伪装成浏览器 } url = 'https://movie.douban.com/chart' #豆瓣电影排行榜 data = requests.get(url, headers=headers).text# 给定url并用requests.get()方法来获取页面的text s=etree.HTML(data)#用etree.HTML()来解析下载的页面数据“data”。
获取电影的xpath信息:
这里的xpath信息要手动获取,获取方式如下:
1.如果你是用谷歌浏览器的话,鼠标“右键”–>“检查元素”
2. Ctrl+Shift+C将鼠标定位到标题。
3.“右键”–> “Copy”–> “Copy Xpath”就可以复制xpath
如下图:
接下来我们获取了电影名称,电影网址,电影评分,电影评价的人数,电影的上映日期及主演等的xpath,发现这些xpath的前半部分都是相同的,所以我们就截取前半部分通用的xpath存放于file中.
例如:获取电影主演的xpath为://*[@id="content"]/div/div[1]/div/div/table[1]/tbody/tr/td[2]/div/p
其中需要把/tbody删除掉,不然获取不了想要的信息,然后只需把table[1]改为:table,就能获取该页面中的多个电影信息。
即截取前半部分的最终xpath为:
.//*[@id="content"]/div/div[1]/div/div/table/tr
利用time.sleep方法睡眠,防止怕太快被网站封了
利用for循环遍历file,然后用.xpath方法连接后半部分的xpath,定位到具体的内容,如果有额外的字符出现还可以用.strip()方法使其去掉,然后把内容存放在变量中。最后在循环内把每次获取到的值输出即可。
file=s.xpath('.//*[@id="content"]/div/div[1]/div/div/table/tr')#copy网页的xpath,截取前半部分通用的 time.sleep(3)#睡眠,防止爬太快被网站封了 scores='评分:' evaluate='一句话评价:' actor='上映日期及主演:' for div in file: title = div.xpath("./td[1]/a/@title")[0] href = div.xpath("./td[1]/a/@href")[0] score=div.xpath("./td[2]/div/div/span[2]/text()")[0] num=div.xpath("./td[2]/div/div/span[3]/text()")[0].strip("(").strip().strip(")").strip() director = div.xpath("./td[2]/div/p/text()")[0]#截取后半部分的xpath,定位到具体的内容 print(f"{title},{href},{actor}{director},{scores}{score},{num}\n")#输出爬取到的内容
该爬虫程序的完整代码如下:
from lxml import etree import requests import time#这里导入时间模块,以免豆瓣封你IP headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36' #伪装成浏览器 } url = 'https://movie.douban.com/chart' #豆瓣电影排行榜 data = requests.get(url, headers=headers).text# 给定url并用requests.get()方法来获取页面的text s=etree.HTML(data)#用etree.HTML()来解析下载的页面数据“data”。 file=s.xpath('.//*[@id="content"]/div/div[1]/div/div/table/tr')#copy网页的xpath,截取前半部分通用的 time.sleep(3)#睡眠,防止爬太快被网站封了 scores='评分:' evaluate='一句话评价:' actor='上映日期及主演:' for div in file: title = div.xpath("./td[1]/a/@title")[0] href = div.xpath("./td[1]/a/@href")[0] score=div.xpath("./td[2]/div/div/span[2]/text()")[0] num=div.xpath("./td[2]/div/div/span[3]/text()")[0].strip("(").strip().strip(")").strip() director = div.xpath("./td[2]/div/p/text()")[0]#截取后半部分的xpath,定位到具体的内容 print(f"{title},{href},{actor}{director},{scores}{score},{num}\n")#输出爬取到的内容
爬取豆瓣电影排行榜的结果如下: