背景:小白,没有计算机基础,只学过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'
dynasties = re.findall(r'
content_tags = re.findall(r'div class="conview conview_main show".*?
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') #渲染
希望自己可以在模仿,修改的基础上,尽快自己独立敲代码。。。。。。