爬虫及词云总结

0.需求

需求:在一个【无下一页】的【动态页面】中获取需要用【查看更多】才能获取完整的信息(【爬虫】),并生成【词云】。
要点:在列表页面用请求头里的参数获取所有数据,并根据这个构建新的url,以此获取每一个完整信息。

1.爬虫

1.1库

requests——发http请求
re——通过正则表达式对字符串进⾏匹配
json——处理 JOSN 数据(json是一种数据交换格式)

1.2请求

1.2.0基础

两种请求方法。根据实际请求类型选择。

  1. get(url, params, args)
  2. post(url, data, json, args)。data 为要发送到指定 url 的字典、元组列表、字节或文件对象;json 为要发送到指定 url 的 JSON 对象。根据网页请求头里面的内容类型确定。

必要伪装

  1. 加入请求头,改变User-Agent——从F12→Network→XHR→heads获取
  2. 代理IP。同一个IP访问过多会被封禁

1.2.1动态页面

问题:无法通过URL获取页面内容。
解释:它是每次加载会不同的页面,点击下一页时上面的URL不变,且用查看源码看不到内容。
方法:获取真实url;利用selenium模拟点击。因后者慢,选择前者。通过F12看真实请求URL,并根据变化规律构建所有真实URL。因为是post请求,所以需要post的参数来构建。

1.2.2异步加载

问题:无法通过URL获取全部内容。
解释:在需要新的数据时,无需全部加载,而是只加载需要的。AJAX(Asynchronous JavaScript and XML)是动态网页用到的东东,可以做到异步更新。本质还是动态页面。
方法:依旧是获取真实URL,根据每次的URL构成找到规律获取全部URL。

1.3获取数据

方法:利用BeautifulSoup对html进行解析(基于css选择器);利用xpath(基于HTML的树结构和节点进行取值);利用JOSN的字段获取,需要返回结果是该格式

1.4清洗数据

问题:得到的内容里面有html的标签。
方法:构建一个模式字符串替换结果中不要的。

regex = re.compile(r'<.*?>')
res_str = regex.sub('', to_replace_str)

2.词云

2.1库

jieba——中文分词库
wordCLoud——词云展示

2.2例子

获取内容→分词→根据参数生成词云

import jieba,numpy
from wordcloud import WordCloud

words = open('a.txt',encoding='utf-8').read()
new_words=' '.join(jieba.cut(words))

# alice_mask=numpy.array(Image.open('./white.jpeg'))
# wordcloud=WordCloud(width=1000, height=860, margin=2, mask=alice_mask, background_color='#FFFFFF',font_path='./song.ttf')

wordcloud=WordCloud(width=1000, height=860, margin=2, background_color='#FFFFFF',font_path='./song.ttf')

wordcloud.generate(new_words)
wordcloud.to_file('aa.jpg')

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