首先先科普一下xpath:
xpath是XML路径语言,它可以用来确定xml文档中的元素位置,通过元素路径来完成对元素的查找。HTML就是XML的一种实现方式,所以xpath是一种非常强大的定位方式。
xpth基本介绍:
XPath(XML Path Language)是一种XML的查询语言,他能在XML树状结构中寻找节点。XPath 用于在 XML 文档中通过元素和属性进行导航
xml是一种标记语法的文本格式,xpath可以方便的定位xml中的元素和其中的属性值。lxml是python中的一个第三方模块,它包含了将html文本转成xml对象,和对对象执行xpath的功能。
Xpath中的绝对路径与相对路径:
Xpath 中的绝对路径从 HTML 根节点开始算,相对路径从任意节点开始。通过开发者工具,我们可以拷贝到 Xpath 的绝对路径和相对路径的代码。
下面进入今天的这个实验:使用scrapy开发自动爬虫豆瓣电影。
首先爬虫第一步导入库:
import requests
from lxml import etree
import csv
import time
然后获取url并返回response值:
参数1:想要获取的url 参数2:爬取的页数
def get_url(m_url, m_page_cnt):
headers = {
# UA伪装
"User-Agent": "xxx",
}
m_resp = requests.get(url=m_url, headers=headers)
return m_resp
将文件保存成.csv形式,并返回文件描述符m_f:
参数1:文件路径 参数2:读写类型 参数3:编码格式 参数4:将单次提取的数据放入暂存列表
def save_csv(m_csv_file, m_rw, m_encoding, m_save_list):
with open(m_csv_file, m_rw, encoding=m_encoding) as m_f:
writer = csv.writer(m_f)
writer.writerows(m_save_list)
return m_f
然后对网页数据进行解析:
有兴趣的同学可以自己试试,这部分就不放完整代码了,可以自己去爬取一下。需要完整代码加Q3041893695可以获得哦!
mv_name = tree.xpath(f'//*[@id="content"]/div/div[1]/ol/li[{i}]/div/div[2]/div/a/span[1]/text()')
mv_kind = tree.xpath(f'//*[@id="content"]/div/div[1]/ol/li[{i}]/div/div[2]/div[2]/p[1]/text()[2]')
mv_people = tree.xpath(f'//*[@id="content"]/div/div[1]/ol/li[{i}]/div/div[2]/div[2]/div/span[4]/text()')
开始编写主函数:
for page_cnt in range(0, 226, 25):
url = f"https://movie.douban.com/top250?start={page_cnt}&filter="
resp = get_url(m_url=url, m_page_cnt=page_cnt)
tree = etree.HTML(resp.text)
save_info_list = []
deal_events()
参数2以追加的形式存储,防止爬取数据被覆盖:
f = save_csv("./movie_info_demo.csv", 'a', 'utf-8', save_info_list)
resp.close()
print(f'第{page_cnt}页信息提取成功')
time.sleep(2)
即可爬取完成
网络爬虫需要有丰富的python知识,要多了解技术文档。
有需完整代码即可三连之后私聊博主或者加Q联系。
祝同学们学习进步,技术能力越来越强!