网页抓取数据百度百科(网络爬虫(又被称为网页蜘蛛,网络机器人)(图))
优采云 发布时间: 2022-02-03 12:00网页抓取数据百度百科(网络爬虫(又被称为网页蜘蛛,网络机器人)(图))
网络爬虫(也称为网络蜘蛛或网络机器人)是一种程序或脚本,它根据一定的规则自动爬取万维网上的信息。其他不太常用的名称是 ant、auto-index、emulator 或 worm。
由于经常看尴尬的东西,突然想写一个抓取尴尬内容的爬虫。它可以用多种语言编写。我将在这里用 Python 编写它。以下为正式开始:
1.知己知彼,百战百胜
我们首先分析它的网页源代码,找到内容和图片的部分代码,比如Chrome、Firefox以及更高版本的IE浏览器,通过选择元素并使用正确的方式,可以快速帮助我们找到我们需要的代码-点击菜单:
2.准备战斗
接下来我们开始获取数据,我先试探性的使用 urllib.urlopen('
3.万事俱备,只欠东风
有了之前的准备,我可以随心所欲地获取数据,随心所欲地玩。现在我只需要内容和图像部分的数据。拦截的方法有很多,比如find函数和正则表达式。为了显得高大上,我选择了正则表达式进行拦截:
1reg = r'\s+(.+)\s+|src="(http://pic\.qiushibaike\.com/system/pictures.+?.jpg)"'
2
4.胜利
我得到了具体的数据,最后我写了一个网页来显示数据。
这是完整的源代码:
1import urllib2
2import re
3import sys
4
5def getHtml(url):
6 '获取页面内容'
7 request = urllib2.Request(url)
8 request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36')
9 return urllib2.urlopen(request).read()
10
11def getArticle(html):
12 '获取内容和图片数据'
13 reg = r'\s+(.+)\s+|src="(http://pic\.qiushibaike\.com/system/pictures.+?.jpg)"'
14 pattern = re.compile(reg)
15 article_list = re.findall(pattern, html)
16 return [(article.decode('utf-8'), img) for (article, img) in article_list]
17
18def generateHtml(pageSize):
19 '在本地生成html页面'
20 for pageNum in range(1, pageSize + 1):
21 url = 'http://www.qiushibaike.com/8hr/page/' + str(pageNum)
22 article_list = getArticle(getHtml(url))
23 html = '\n\n\t\n\t\t\n\t\t糗百第' + str(pageNum) + '页\n\t\n\t\n'
24 for (article, img) in article_list:
25 if article:
26 html += '\t\t<p>' + article + '\n'
27 if img:
28 html += '\t\t
'/spanspan /spanspan class=\n'
29 html += '\n\t\n'
30 file = open(u'糗百第' + str(pageNum) + u'页.html', 'w')
31 file.write(html)
32 file.close()
33
34#解决编码问题
35stdout = sys.stdout
36stdin = sys.stdin
37stderr = sys.stderr
38reload(sys)
39sys.stdout = stdout
40sys.stdin = stdin
41sys.stderr = stderr
42sys.setdefaultencoding('utf-8')
43#开始
44pageSize = raw_input(u'请输入获取前几页:'.encode('gbk'))
45try:
46 generateHtml(int(pageSize))
47 print u'获取成功!'
48except:
49 print u'输入有误!'
50raw_input(u'\n按回车退出'.encode('gbk'))
51
</p>
生成网页截图: