爬虫之xpath/BeautifulSoup/re 基础学习总结(一)

背景:小白,没有计算机基础,只学过python基础语法。大二,目前因为感兴趣所以先学着。开始学习爬虫,记录学习情况,这是我的第一篇文章,存在诸多不足,如果偶尔看见这篇文章,欢迎各位批评指正,也可以对我的学习给予一些建议。现在就是看成套的视频教程学习,过一段时间准备买崔庆才老师的《python 3: 网络爬虫开发实战》学习

正文:


1. 首先是导入模块,三种都需要导入requests库:import requests,此外使用BeautifulSoup语法: from bs4 import BeautifulSoup , 使用re语法:import re, 使用xpath语法:from lxml import etree

2.1 定义一个请求头headers,请求头常见参数User-Agent、Referer、Cookie,不过一般设置User-Agent就可以

2.2 获取网站的url

2.3 使用requests库发送get请求,返回response = requests.get(url,headers=headers)

利用response的一些属性获取text,常见的有response.text(容易出现乱码)、response.content(出现乱码情况,一般使用response.content.decode('utf-8'))

3. 数据解析


xpath语法分析:

(1)解析html字符串,使用 'lxml.etree.HTML'进行解析,

html = etree.HTML(text)

(2)对html进行xpath语法分析,注意xpath函数返回的是一个列表,需要以切片的方式获取具体值

(3)xpath语法:

/:子标签

//:子孙标签

//a/@href:a标签的href属性

//a[@href]:带有href属性的a标签

./td[4]/text(): 通过text()函数获取文本

ul=html.xpath("//ul[@class='lists']")[0]

lis=ul.xpath("./li")


BeautifulSoup提取数据:

(1)利用BeautifulSoup解析文本,可以指定解析器

soup = BeautifulSoup(text,'html5lib')  'html5lib'可以替换成其他解析器

(2)find与find_all提取标签,第一个参数是标签名,第二\三......个是过滤信息,或者是将属性的名字以及对应的值以字典的形式传给"attrs"属性

conMidtab = soup.find('div',class_='conMidtab')

tables = conMidtab.find_all('table')


re正则解析数据:

(1)一般使用findall函数,注意与BeatifulSoup的find_all函数进行区分,注意贪婪模式与非贪婪模式('?'),re.DOTALL考虑的是换行的情况

titles = re.findall(r'.*?(.*?)',text,re.DOTALL)

dynasties = re.findall(r'

.*?(.*?)',text,re.DOTALL)

content_tags = re.findall(r'div class="conview conview_main show".*?

(.*?)
',text)


4.对每一个页面的数据都使用相同的方法进行解析 

解析1-9页的数据:

for x in range(1,10):

        url = "https://www.gswen.cn/ancient/0/0/0/0/0/%s/" %x

        parse_page(url)

5.结束:if __name__=="__main__":

ps: 利用enumerate函数

for index,info in enumerate(infos):

for index,tr in enumerate(trs):

pps: 简单的数据可视化——柱形图

from pyecharts import Bar  #导入

     ALL_DATA.sort(key=lambda data:data["min_temp"])   #提取数据

    data = ALL_DATA[0:10]     #提取数据

    cities = list(map(lambda x:x['city'],data))  #横轴

   temps = list(map(lambda x:x['min_temp'],data))  #纵轴

    chart = Bar("中国天气最低气温排行榜")     #表名

    chart.add("",cities,temps)  

    chart.render('temperature.html')   #渲染

希望自己可以在模仿,修改的基础上,尽快自己独立敲代码。。。。。。

你可能感兴趣的:(爬虫,python)