1、抓取数据
2、分页爬虫
规律分析
1、抓取数据,发现每一项都是data-tools标签

2、分页分析

代码
import requests
from bs4 import BeautifulSoup
import re
import json
import jieba
#获取html页面信息
def getKeywordResult(keyword, pagenum):
url = 'http://www.baidu.com/s?wd=' + keyword + '&pn=' + pagenum + '0'
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = 'utf-8'
return r.text
except:
return ""
#解析并抽取数据
def parserLinks(html):
soup = BeautifulSoup(html, "html.parser")
links = []
for div in soup.find_all('div', {'data-tools':re.compile('title')}):
data = div.attrs['data-tools']
d = json.loads(data)
links.append(d['title'])
words_all.append(d['title'])
return links, words_all
#词频统计
def words_ratio(words_all):
words = []
for i in words_all:
tmp = jieba.lcut(i)
for tmp_word in tmp:
words.append(tmp_word)
counts = {}
for word in words:
if len(word) == 1:
continue
else:
counts[word] = counts.get(word, 0) + 1
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)
for i in range(30):
word, count = items[i]
print("{0:<10}{1:>5} 占比:{2}".format(word, count, int(count)/len(words)))
def main():
for pagenum in range(0, 50):
html = getKeywordResult('老张', str(pagenum))#输入搜索关键词和页数
ls, words_all = parserLinks(html)
count = pagenum + 1
for i in ls:
print("[{:^3}]{}".format(count, i))
ls = []
words_ratio(words_all)
if __name__ == '__main__':
words_all = []
main()结果

后续的思考
代码都很简单,高手要懂得如何去扩展。现在虽然数据都爬下来了,但是非常凌乱,仍然需要人工去分析比对。这样的数据我称之为裸数据,理想的数据是可读且有关联的,我称之为金子数据。
这个转换分析的过程涉及到两个问题:
1、如何实现可读?
可以用字典里面的del[]方法删去坏的数据
2、如何实现数据的关联性?
先将裸数据进行二次分析,将相关的字项放到一块,然后再做运行
原文地址:http://blog.51cto.com/12814931/2126612