python爬虫快速入门

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-')]")
<div id="post-123214243"></div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值