标签:isp __init__ from 实现 文档 方式 python爬虫 star self
第四天:
XPATH和LXML类库
为什么要学习XPATH和LXML类库:
lxml是一款高性能的 Python HTML/XML 解析器,我们可以利用XPath,来快速的定位特定元素以及获取节点信息
什么是XPATH:
XPath (XML Path Language) 是一门在 HTML\XML 文档中查找信息的语言,
可用来在 HTML\XML 文档中对元素和属性进行遍历。
XPATH节点选择
常用节点选择工具:
在chrome浏览器中访问:chrome://extensions/
启动开发者模式(开关按钮推到右边)
把xpath插件xpath_helper_2_0_2.crx拖动到Chrome中即可
首先,需要安装python的lxml插件(LXML)
pip install lxml |
x:xml
path:路径
两者结合表示使用路径的方式去查找xml的内容
l:lib
xml:xml格式
安装完lxml库,可以在python中识别xml
以贴吧为例:https://tieba.baidu.com/f?kw=%E8%9C%A1%E7%AC%94%E5%B0%8F%E6%96%B0&pn=0
1 查找标签
全文查找(以//开头)
//div |
//span |
//a |
2 子路径查找(在父目录下找子目录)
//div/span |
//div/a |
//li/div/div/div/div/a |
//li//a |
//li/div//a |
3 查找属性
如下格式查找属性
标签名[@属性名=属性值] |
比如:
//a[@class="j_th_tit"] |
//div[@class="t_con cleafix"] |
//div[@class="threadlist_lz clearfix"]//a[@class="j_th_tit"] |
注意:这里获取的是标签对象,不是内容
4 读取属性
如下格式读取属性
标签名/@属性名 |
比如:
//a[@class="j_th_tit"]/@href |
//div[@class="threadlist_lz clearfix"]//a[@class="j_th_tit"]/@href |
5 获取内容
通过text()获取文本的内容
标签名/text() |
比如:
//a[@class="j_th_tit"]/text() |
//div[@class="threadlist_lz clearfix"]//a[@class="j_th_tit"]/text() |
注意:这里获取的才是真正的内容,字符串。
练习:用xpath爬取糗事百科的题目和作者。
代码见test4-qiushispider.pt
import requests
from lxml import etree
import json
class Qiushispider:
def __init__(self):
self.url_temp
= "https://www.qiushibaike.com/8hr/page/{}/"
self.headers
= {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"}
def get_url_list(self):
# 把页码传进去
return [self.url_temp.format(i) for i in range(1,2)]
def parse_url(self, url):# 2.遍历,发送请求,获取响应
response = requests.get(url, headers=self.headers)
return response.content.decode()
def get_content_list(self, html_str):#
3.提取数据
html = etree.HTML(html_str)
li_list = html.xpath(‘//div[@class="recommend-article"]/ul/li‘) #分组
content_list = []
for li in li_list:
item = {}
item["title"] = li.xpath(".//div/a/text()")#
提取标题
item["author"] = li.xpath(".//div/a/span/text()")#
提取作者
content_list.append(item)
return content_list
def save_content_list(self, content_list):# 4.保存
with open("qiushi.txt", "a") as f:
for content
in content_list:
f.write(json.dumps(content, ensure_ascii=False, indent=2))
def run(self):
# 1.url_start
url_list = self.get_url_list()
# 2.遍历,发送请求,获取响应
for url in url_list:
html_str = self.parse_url(url)
# 3.提取数据
content_list = self.get_content_list(html_str)
# 4.保存
self.save_content_list(content_list)
if __name__ == "__main__":
qiushi = Qiushispider()
qiushi.run()
实现爬虫的总结:
-准备start_ulr
-如果url地址规律不明显,总数不确定,通过代码提取下一页。
- xpath
-寻找url地址,部分参数在当前的响应中
-准备url_list
-页码总数明确
-url地址规律明显
2.发送请求,获取响应
-添加随机的User-Agent,反反爬虫
-添加随机的代理ip,反反爬虫
-在对方判断我们是爬虫之后应该添加更多的headers字段,包括cookie
-cookie的处理可以使用session来解决
-准备一堆能用的cookie,组成cookie池
-如果不登录(不是post请求)
-准备刚开始能够成功请求对方网站的cookie,即接收对方网站设置在response的cookie
-下一次请求的时候,使用之前的列表中的cooKie来请求
-如果登录
-准备多个账号
-使用程序获取每个账号的cookie
-最后请求登录之后才能访问的网站随机的选择cookie
3.提取数据
-确定数据的位置
-如果数据在当前url地址中
直接提取
-如果数据不在当前的url地址中
-在其他的响应中,寻找数据的位置
1.从network中从上往下找
2.排除法(排除js,图片等)
-数据提取方法
1.xpath,从HTML中提取整块的数据。
2.json
3.re
4.保存
-保存在本地(text)
-保存在数据库
标签:isp __init__ from 实现 文档 方式 python爬虫 star self
原文地址:https://www.cnblogs.com/sujiu/p/11552350.html