python爬虫快速入门
创始人
2025-05-28 10:46:40

selector库

xpath语法常用规则
nodename 选取此节点的所有子节点
/ 从当前节点选取直接子节点
// 从当前节点选取子孙节点,而不考虑它们的位置,跨节点获取标签
. 选取当前节点
… 选取当前节点的父节点
@ 选取属性
text() 选取文本
可以配合使用.//意思是当前节点所有子孙节点

1、获取标签的xpath路径
在这里插入图片描述
在这里插入图片描述

2、通过class获取table下的tbody标签的tr列表,获取到的是一个数组(注:前面加.)
在这里插入图片描述

3、从数组的第二个开始获取(注:前面加.)

all_trs = response.xpath("//table[@class='forums_tab_table']//tr")[2:]

4、获取tr标签的第二个td标签(注:前面加.)

if tr.xpath(“.//td[1]/span/text()”).extract():
status = tr.xpath(“.//td[1]/span/text()”).extract()[0]
topic_item[“status”] = status

5、获取text,获取到的东西都是数组,所以我们要获取第0个元素(注:前面加.)

 create_time = answer_item.xpath(".//label[@class='date_time']/text()").extract()[0]

6、获取a标签里面的href的值(注:前面加.)

 next_page = response.xpath("//a[@class='pageliststy next_page']/@href").extract()

7、获取数组的最后一个元素 -1(注:前面加.)

author_id = author_url.split("/")[-1]

8、提取时间格式(注:前面加.)

create_time = tr.xpath(".//td[4]/em/text()").extract()[0]
create_time = datetime.strptime(create_time, "%Y-%m-%d %H:%M")

9、找下一页的url,涉及到递归

last_time_str = tr.xpath(".//td[6]/em/text()").extract()[0]
last_time = datetime.strptime(last_time_str, "%Y-%m-%d %H:%M") // 将字符串转换成时间类型

10、防止报错写法

if tr.xpath(“.//td[1]/span/text()”).extract():
status = tr.xpath(“.//td[1]/span/text()”).extract()[0]
topic_item[“status”] = status

11、区分插入数据还是更新数据

def save(self):
topic = Topic()
topic.title = self[“title”]
topic.content = self[“content”]
topic.id = self[“id”]
topic.author = self[“author”]
topic.create_time = self[“create_time”]
topic.answer_nums = self.get(“answer_nums”, 0)
topic.click_nums = self.get(“click_nums”, 0)
topic.praised_nums = self.get(“praised_nums”, 0)
topic.jtl = self.get(“jtl”, 0)
topic.score = self.get(“score”, 0)
topic.status = self[“status”]
topic.last_answer_time = self[“last_answer_time”]existed_topics = Topic.select().where(Topic.id == topic.id)
if existed_topics:topic.save()
else:topic.save(force_insert=True)

12、记住.//和//是不一样的,为了防止错误,我们全部都要使用.//

13、数字和文本混合在一起,我们应该怎么把数字提取出来呢

jtl_match = re.search("(\d+)%", jtl_str)if jtl_match:jtl = int(jtl_match.group(1))

14、获取div标签,并且是以id的值以post-开头

all_divs = response.xpath("//div[starts-with(@id, 'post-')]")

相关内容

热门资讯

cad打印线条粗细设置 cad... 004-线型(下)打印样式设置和线型文件使用一、线宽设置方法制图规范里边的线宽要求,我们已经定义好,...
荼蘼什么意思 岁月缱绻葳蕤生香... 感谢作者【辰夕】的原创独家授权分享编辑整理:【多肉植物百科】百科君坐标:云南 曲靖春而至,季节流转,...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...