爬虫学习笔记(二):requests基础用法之爬取各类主流网站2

系列文章目录

爬虫学习笔记(一):requests基础用法之爬取各类主流网站1


前言

抱歉,由于工作上的原因,很久没有更新了。作为初学者,难免会遇到很多坑,本系列主要想给初学者一些借鉴,相信大家都碰上过,复制网站上的代码却无法运行的情况,本系列文字主要帮助你解决这些问题,防止掉到坑里。

提示:以下是本篇文章正文内容,下面案例可供参考

一、复习REQUEST+XPATH爬取

上节课,我们使用REQUEST+XPATH爬取了豆瓣和知乎日报的标题信息,你肯定会问为啥选这两个网站,因为这2个网站都是采用python编写的,爬取内容也都保存在elements中,爬取比较容易。
下面,我们继续爬取另一个python语言编写的网站果壳网www.guokr.com(和这类网站杠上了),继续使用这个套路。
代码如下(示例):

import requests
from lxml import html
url='https://www.guokr.com/science/category/science' #需要爬数据的网址
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
response=requests.get(url,headers=headers)
print(response.status_code)
page=requests.Session().get(url,headers=headers)
tree=html.fromstring(page.text)  #
result=tree.xpath('//div[@class="layout__Skeleton-zgzfsa-3 styled__InfoTitileWrap-sc-1b13hh2-7 eCquRY"]//text()') #获取需要的数据
count = 0
for i in result:
    print(i, end='\n')
    count += 1
    if (count % len(result) == 0):
        print(end='\n')

套路总结如下:
1.requests.get(url)抓取一个链接的页面;
2.抓取的页面字符形式喂给 html.fromstring();
3.xPath定位并提取感兴趣的内容;
4.数据写入数据库或txt;
当然lxml也有别的写法,比如from lxml import etree
代码如下(示例):

import requests
from lxml import etree
url='https://www.guokr.com/science/category/science' #需要爬数据的网址
headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/75.0.3770.100 Safari/537.36'}
print(response.status_code)
page=requests.Session().get(url,headers=headers)
tree=etree.HTML(page.text)
result=tree.xpath('//div[@class="layout__Skeleton-zgzfsa-3 styled__InfoTitileWrap-sc-1b13hh2-7 eCquRY"]//text()') #获取需要的数据
count = 0
for i in result:
    print(i, end='\n')
    count += 1
    if (count % len(result) == 0):
        print(end='\n')

总结如下:
1.requests.get(url)抓取一个链接的页面;
2.抓取的页面内容以text的形式由etree.HTML进行解析;
3.xPath定位并提取感兴趣的内容;
使用细节上有一些细微差别,但得出的结果其实是一样的。套路

二、Chrome页面查找关键词进行定位

1.使用Chrome浏览器查找爬取页面的关键词。

普通网页的信息都能在Elements中查找到,但也包含例外。lxml库具有的局限性,只能分析HTML的页面。还有一种方法是我们可以使用Chrome浏览器的检查页面下的Search功能查找对应的信息,在NETWORK-Response进行定位。
以BILIBILI的番剧网页为例,网址如下:https://www.bilibili.com/v/popular/rank/bangumi
在这里插入图片描述

代码如下(示例):

import requests
from lxml import etree
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
}
base_url = "https://www.bilibili.com/v/popular/rank/bangumi"
response = requests.get(url=base_url, headers=headers)
html = response.content.decode("utf-8")
print(html)

etree_obj = etree.HTML(html)
# 链接
ret = etree_obj.xpath('//div[@class="info"]/a[@class="title"]/text()')
print(ret,end=",")
ret1 = etree_obj.xpath('//div[@class="info"]/a[@class="title"]/@href')
print(ret1,end=",")
data_zip = zip(ret[0:],ret1[0:])
# 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,
# 然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
#我们可以使用 list() 转换来输出列表。
#print(list(data_zip))

总结

以上就是今天要讲的内容,本文介绍了如果无法直接利用Elements查找内容进行爬取,可以在NETWORK-Response进行查看要爬取的内容,下一个课讲关于JSON的内容。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值