2021年第一份教程:网页数据爬虫抓包入门教程中

网页数据抓包入门教程中

前面我们简单的了解了一个页面的构成,知道了一个网页基本的构成方式,接下来我们进行二阶段学习,数据的抓取

2.1 在此之前,我们需要了解一个爬虫协议,通过查看爬虫协议,我们能了解到这个网站哪些人可以爬,哪些数据可以爬,在主站网址后面加/robots.txt就可以查看网站的爬虫协议,例如:我们输入http://baidu.com/robots.txt,拿到百度的爬虫协议,每组列表第一个为爬虫名(用户名),后面Disallow跟的表示这些文件路径不能爬。

2.2爬虫代码学习:

首先在电脑安装requests的库,控制台输入pip install requests,自动完成安装,这个requests的库里有一个get的方法,可以获取一个指定页面的响应内容,

我们编写爬虫,一般三步走

一,找文件,点开浏览器,找到开发者工具,查看网页源代码,找到我想要的数据位置

二,程序拿页面

三,解析

首先,我们利用开发者工具发现我们想要的内容在网页的那个位置下以后,就可以对网页发出请求,拿到页面响应的内容;在开发者工具里找到User-Agent与Cookie备用

导入requests库

import requests #导入库

resp = requests.get(url='https://www.uisdc.com/',
				  headers={
     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75',
				  		 'Cookie': 'Hm_lvt_7aeefdb15fe9aede961eee611c7e48a5=1610174500; notLoginHasViewPages=2; Hm_lpvt_7aeefdb15fe9aede961eee611c7e48a5=1610174550'})

resp = requests.get(url = 网址,headers = {字典格式伪装信息,讲上面User-Agent与Cookie两个常用的伪装信息加进去})

这样,我们就能获取到这个页面响应的内容,打印resp,我们一般能看到,说明我们能正常获取到这个页面的内容,想看具体有哪些内容,我们只需要在这个网页对象后.text

resp = requests.get(url='https://www.uisdc.com/',
              headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75',
                   'Cookie': 'Hm_lvt_7aeefdb15fe9aede961eee611c7e48a5=1610174500; notLoginHasViewPages=2; Hm_lpvt_7aeefdb15fe9aede961eee611c7e48a5=1610174550'})
print(resp.text)

就可以看到这个网页所有的代码,那么我们获取到了这个页面以后发现代码太多了,我们需要的数据在里面眼花缭乱,很难一目了然看到,所以我们需要进入第三步,解析

解析的方式有很多,比如 ~ 正则表达式解析,CSS选择器解析, XPath解析

  • 正则解析

我们先试试正则解析,假如我想获得这个页面所有的文章标题,通过开发者工具,我发现所有内容都在h2标题 class为title的标签下,我导入re,仔细研究标题标签,发现这一个标题都在这里面

class=“title”> 标题内容

import re

pattern = re.compile(r'class="title">(.*?)')
print(pattern.findall(resp.text))

我写出这样一个正则后,对网页的代码进行匹配,拿到了标题。

  • CSS选择器解析

我们安装bs4这个库以后就可以使用CSS选择器解析了

css选择器,第一步与正则一样,拿到页面,接下来就不同了,因为它是选择器解析,它需要先把这个网页所有的标签整理好,不让他乱成一团,所以第二步应该是使用bs4选择器里的方法将页面内容转换成选择器能读懂的内容:

soup = bs4.BeautifulSoup(resp.text, 'html.parser')

这里,我们利用bs4内置函数BeautifullySoup将resp.text 用 'html.parser’解析成bs4能读懂的内容,用soup这个变量保存起来。

然后分析,发现标题内容都在h2标签里,并且这个h2标签class还被定义成了title

soup = bs4.BeautifulSoup(resp.text, 'html.parser')
anchors = soup.select('h2.title')
print(anchors)

我使用bs4下的查找工具select,查找了所有h2 且 h2标签被定义成了title的标签

打印运行以后发现拿到了一堆数据,其中还混杂了标签,这个查找工具返回的是一个个列表,标签列表,我们可以循环遍历一下这些标签,使用这些标签的text属性,拿到标签里的文字,这样,就拿到所有标题了

soup = bs4.BeautifulSoup(resp.text, 'html.parser')
titles = soup.select('h2.title')
for title in titles:
    print(title.text)

这里需要解释的是我们在拿标签的时候,写的(‘h2.title’)这一段,叫标签选择器,以后大家可以找一找标签选择器的教程详细学一下,这里selct和标签选择器也有很多种其他方法,这里就不说其他的了,免得混淆大家。

2.3 数据持久化

我们仅仅是拿到数据是不行的,还需要进行写入文件,以便长久保存,以后随时可以拿出来用,我们写入Excel的方法很多,我只教一个,免得混淆大家,我们安装一个xls的库,这个库兼容性非常好,而且性能也不错。

excel文件本身为工作簿,一个表单为工作表,我们写入每个格子叫单元格,所以,接下来,我们安装好xls库以后工作就非常简单了。导入库,创建工作簿,创建表单,写入数据

soup = bs4.BeautifulSoup(resp.text, 'html.parser')
lists = soup.select('a.a_block')
print(lists)
for titles in lists:
    title = titles.select_one('h2.title').text
    nue = titles.select_one('p').text

为了写入数据,我将上面代码改了一下,多获取了标题下面的一个小段落,这样方便我们写入excel

我们首先导入库,创建工作簿,建一个工作簿,命名为表单

import xlwt
wb =xlwt.Workbook()
sheet = wb.add_sheet('表单')

创建单元格索引:

sheet.write(0,0,'序号')
sheet.write(0,1,'标题')
sheet.write(0,2,'详情')

接下来,我们只需要将数据添加到单元格种就好了

wb =xlwt.Workbook()
sheet = wb.add_sheet('表单')

sheet.write(0,0,'序号')
sheet.write(0,1,'标题')
sheet.write(0,2,'详情')
a = 0

soup = bs4.BeautifulSoup(resp.text, 'html.parser')
lists = soup.select('a.a_block')
print(lists)
for titles in lists:
    title = titles.select_one('h2.title').text
    nue = titles.select_one('p').text
    lis_name = [title,nue]
    a += 1
    for index,name in enumerate(lis_name):
        sheet.write(a,index,name)
wb.save('页面.xls')

到这里,爬虫的基础就结束了,一般简单的小网站都可以这样去推,来爬取数据,接下来,补充一些大纲外的东西

代理ip的使用

我们爬取数据的时候,往往在短时间类进行大量的操作,一般别人也不是傻子,不可能傻乎乎的让你爬,有时候会被封禁IP,这个时候我们就需要去使用代理ip,那么代理ip如何使用呢?

其实只有一点不同,就是在我们在一开始发出get请求的时候,在get请求里再添加一项proxies属性就好了,proxies里放入我们的代理ip地址,就可以奔放了,这个代理ip地址需要自己去专业的网站去买,国内ip还是比较便宜了,接下来我用上面网站写一个例子大家参考

resp = requests.get(url='https://www.uisdc.com/',
              headers={
     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75',
			 proxies={
     
                'https': f'http://ip:端口号'}
                   ) # 这样就ok了

这里基本上别人不会直接给你文本数据,会给你一个链接,你去get这个链接,会收到json数据,我们需要将其转换一下,取出来,具体可以根据网站来操作

你可能感兴趣的:(The,first,week,python,css,html,编程语言)