|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
此爬虫程序用于爬取——所有在PS吧中,留下的邮箱账号
发送源代码:
import requests
import re
headers ={"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"}
def getArticleList(pn=1):
response = requests.get("http://tieba.baidu.com/f/search/res?isnew=1&kw=&qw=ps%BD%CC%B3%CC%20%D3%CA%CF%E4&rn=10&un=&only_thread=1&sm=1&sd=&ed=&pn={}".format(pn),headers =headers)
html = response.text
reg = r'"(/p/\d+\?pid=\d+&cid=0#\d+)"'
return re.findall(reg,html)
def getArticleContent(url):
html = requests.get("http://tieba.baidu.com{}".format(url),headers = headers).text
reg = r'[0-9a-zA-Z-_\.]+@[0-9a-zA-Z-_\.]+\.[a-zA-Z]+'
mailList = re.findall(reg,html)
fn = open("E:\数据分析师\python\python基础\python 练习\python1.1.txt","a")
for mail in mailList:
fn.write("{}\n".format(mail))
fn.close()
reg = r'<a href="/p/\d+\?pn=\d">下一页</a>'
net = re.findall(reg,html)
print net
if not net:
print "已经是最后一页"
return
else:
print "正在爬取下一页"
getArticleContent(net[0])
for pn in range(1,39):
print "正在爬取第{}页的数据".format(pn)
for articleUrl in getArticleList(pn):
getArticleContent(articleUrl)
files = open("E:\数据分析师\python\python基础\python 练习\python1.1.txt").readlines()
files = set(files)
with open("E:\数据分析师\python\python基础\python 练习\python1.1.txt","w") as fn:
for i in files:
fn.write(i)
print "搞定"
if __name__ == "__main__":
getArticleList()
红色背景的代码存在问题
问题如下:
一个网页内存在分页,需要爬取每一个分页。上面的代码无法爬取下一页。
下面是对问题代码的拆系:如下
def get():
response = requests.get("http://tieba.baidu.com/p/5262776557?pn=1")
#此URL为爬取的一个页面,可以看出此页面有4个分页.
html = response.text
reg = r'<a href="(.*?)">下一页</a>'
#如果该页面不是最后一页的话,该页面会存在“下一页”的链接,审核该元素,发现其正则表达式为reg.
net = re.findall(reg,html)
print net
#然而,最终得到的net始终为空列表。
if __name__ == "__main__":
get()
请问,代码有什么问题?多谢指教。
本帖最后由 jerryxjr1220 于 2017-10-26 17:17 编辑
你用的是python2吧,你的正则表达式有问题。
reg = r'<a href="(.*?)">下一页</a>' 在python2中是匹配不出来的。
换python3的话是可以匹配的。
或者你在代码头部加上编码
- # -*- coding: cp936 -*-
- html = '<a href="/p/5262776557?pn=4">下一页</a>'
- import re
- print re.findall(r'<a href="(.*?)">下一页</a>', html)
复制代码
这样就可以匹配了
=================== RESTART: C:\Users\xuj06\Desktop\tt.py ===================
['/p/5262776557?pn=4']
>>>
|
|