1、发送请求、获取响应
以爬取斗鱼主播房间的部分信息为例,网址为https://www.douyu.com/directory/all ,先导入requests模块,通过requests发送请求、然后会获取响应。
import requests
from lxml import etree
url="https://www.douyu.com/directory/all"
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"}
response=requests.get(url,headers=headers)
使用content得到响应的内容,并对内容进行解码
html_str=response.content.decode('utf-8','ignore')
2、lxml的使用
lxml是支持xpath的,所以使用lxml可以方便的解析返回的html字符串,快速的定位特定元素以及节点信息,提高了爬虫的效率。下面使用lxml中的etree模块解析html。
html=etree.HTML(html_str,parser=etree.HTMLParser(encoding='utf-8'))
使用xpath定位爬取信息的节点,比如主播房间的标题和主播名。由下图可以知道所有的房间信息都在ul标签下的li标签中,最后就可以使用xpath得到所以的li标签内容。
li_list=html.xpath("//div[@class='layout-Module-container layout-Cover ListContent']/ul[@class='layout-Cover-list']/li")
3、循环遍历提取内容
获取所有的房间的部分信息,需要对所有的li标签列表进行便利。
for li in li_list:
item={}
item["标题"]=li.xpath(".//div[@class='DyListCover-content']/div[@class='DyListCover-info']/h3/text()")[0]
item["主播名"]=li.xpath(".//div[@class='DyListCover-content']/div[@class='DyListCover-info']/h2/text()")[0]
print(item)