前提:

python3.4

windows

作用:通过搜狗的微信搜索接口http://weixin.sogou.com/来搜索相关微信文章,并将标题及相关链接导入Excel表格中

说明:需xlsxwriter模块,另程序编写时间为2017/7/11,以免之后程序无法使用可能是网站做过相关改变,程序较为简单,除去注释40多行。

正题:

思路:打开初始Url  –> 正则获取标题及链接  –>  改变page循环第二步  –>  将得到的标题及链接导入Excel

爬虫的第一步都是先手工操作一遍(闲话)

进入上面提到的网址,如输入:“图片识别”,搜索,网址变为“http://weixin.sogou.com/weixin?type=2&query=%E5%9B%BE%E7%89%87%E8%AF%86%E5%88%AB&ie=utf8&s_from=input&_sug_=n&_sug_type_=1&w=01015002&oq=&ri=4&sourceid=sugg&sut=0&sst0=1499778531195&lkt=0%2C0%2C0&p=40040108”标红为重要参数,type=1时是搜索公众号,暂且不管,query=‘搜索关键词’,关键词已经被编码,还有一个隐藏参数page=1

当你跳到第二页时可以看到“http://weixin.sogou.com/weixin?oq=&query=%E5%9B%BE%E7%89%87%E8%AF%86%E5%88%AB&_sug_type_=1&sut=0&lkt=0%2C0%2C0&s_from=input&ri=4&_sug_=n&type=2&sst0=1499778531195&page=2&ie=utf8&p=40040108&dp=1&w=01015002&dr=1”

好了,url可以得到了

1 url = \’http://weixin.sogou.com/weixin?type=2&query=\’+search+\’&page=\’+str(page) 

search是要搜索的关键词,用quote()编码即可插入

 

1 search = urllib.request.quote(search)

 

page是用来循环的

1 for page in range(1,pagenum+1):
2     url = \'http://weixin.sogou.com/weixin?type=2&query=\'+search+\'&page=\'+str(page)

完整的url已经得到了,接下来访问url,获得其中的数据(创建opener对象,添加header())

1 import urllib.request
2     header = (\'User-Agent\',\'Mozilla/5.0\')
3     opener = urllib.request.build_opener()
4     opener.addheaders = [header]
5     urllib.request.install_opener(opener)
6     data = urllib.request.urlopen(url).read().decode()

得到页面内容,采用正则表达获取相关数据

1 import re
2     finddata = re.compile(\'<a target="_blank" href="(.*?)".*?uigs="article_title_.*?">(.*?)</a>\').findall(data)
3     #finddata = [(\'\',\'\'),(\'\',\'\')]

通过正则获取的数据中存在干扰项(链接:‘amp;’)和无关项(标题:\'<em><…><….></em>\’),用replace()解决

1 title = title.replace(\'<em><!--red_beg-->\',\'\')
2 title = title.replace(\'<!--red_end--></em>\',\'\')
1 link = link.replace(\'amp;\',\'\')

将处理后的标题和链接保存在列表中

1 title_link.append(link)
2 title_link.append(title)

如此搜索的标题和链接都得到了,接下来导入Excel

先创建Excel

1 import xlsxwriter
2 workbook = xlsxwriter.Workbook(search+\'.xlsx\')
3 worksheet = workbook.add_worksheet(\'微信\')

将title_link中的数据导入Excel

1 for i in range(0,len(title_link),2):
2     worksheet.write(\'A\'+str(i+1),title_link[i+1])
3     worksheet.write(\'C\'+str(i+1),title_link[i])
4 workbook.close()

完整代码:

 1 \'\'\'
 2 python3.4 + windows
 3 羽凡-2017/7/11-
 4 用于搜索微信文章,保存标题及链接至Excel中
 5 每个页面10秒延迟,防止被限制
 6 import urllib.request,xlsxwriter,re,time
 7 \'\'\'
 8 import urllib.request
 9 search = str(input("搜索微信文章:"))
10 pagenum = int(input(\'搜索页数:\'))
11 import xlsxwriter
12 workbook = xlsxwriter.Workbook(search+\'.xlsx\')
13 search = urllib.request.quote(search)
14 title_link = []
15 for page in range(1,pagenum+1):
16     url = \'http://weixin.sogou.com/weixin?type=2&query=\'+search+\'&page=\'+str(page)
17     import urllib.request
18     header = (\'User-Agent\',\'Mozilla/5.0\')
19     opener = urllib.request.build_opener()
20     opener.addheaders = [header]
21     urllib.request.install_opener(opener)
22     data = urllib.request.urlopen(url).read().decode()
23     import re
24     finddata = re.compile(\'<a target="_blank" href="(.*?)".*?uigs="article_title_.*?">(.*?)</a>\').findall(data)
25     #finddata = [(\'\',\'\'),(\'\',\'\')]
26     for i in range(len(finddata)):
27         title = finddata[i][1]
28         title = title.replace(\'<em><!--red_beg-->\',\'\')
29         title = title.replace(\'<!--red_end--></em>\',\'\')
30         try:
31             #标题中可能存在引号
32             title = title.replace(\'&ldquo;\',\'"\')
33             title = title.replace(\'&rdquo;\',\'"\')
34         except:
35             pass
36         link = finddata[i][0]
37         link = link.replace(\'amp;\',\'\')
38         title_link.append(link)
39         title_link.append(title)
40     print(\'第\'+str(page)+\'页\')
41     import time
42     time.sleep(10)
43 worksheet = workbook.add_worksheet(\'微信\')
44 worksheet.set_column(\'A:A\',70)
45 worksheet.set_column(\'C:C\',100)
46 bold = workbook.add_format({\'bold\':True})
47 worksheet.write(\'A1\',\'标题\',bold)
48 worksheet.write(\'C1\',\'链接\',bold)
49 for i in range(0,len(title_link),2):
50     worksheet.write(\'A\'+str(i+1),title_link[i+1])
51     worksheet.write(\'C\'+str(i+1),title_link[i])
52 workbook.close()
53 print(\'导入Excel完毕!\')

 

版权声明:本文为AngelYuFan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/AngelYuFan/p/7152760.html