打开APP
未登录
开通VIP,畅享免费电子书等14项超值服
开通VIP
首页
好书
留言交流
下载APP
联系客服
Python爬虫爬取百度搜索结果
dbn9981
>《临时适用》
2016.10.03
关注
[python]
view plain
copy
# -*- coding: utf-8 -*-
#---------------------------------------
# 程序:百度搜索爬虫
# 版本:0.1
# 作者:LuoQi
# 日期:2015-03-24
# 语言:Python 2.7
# 操作:输入带分页的地址,去掉最后面的数字,设置一下起始页数和终点页数。
# 功能:下载对应页码内的所有页面并存储为txt文件。
#---------------------------------------
import string
import urllib
import urllib2
import re
import os
import socket
import time
#全局变量,如果频繁urlopen一个网站会被远程连接强制断掉,这里为了递归调用函数,接着从断掉的那一页重新开始爬取
CONSTANT = 1
def MailSearch(url,begin_page,end_page):
global CONSTANT
#正则匹配,这里我要获取@xxxx.com.cn结尾的邮箱号
p = re.compile(r'\w+<em>@xxxx.com.cn')
base_dir = "E:\\mailAddress\\"
for i in range(begin_page, end_page+1):
print i
CONSTANT +=1
try:
sName = string.zfill(i,7) + '.txt' #自动填充成六位的文件名
f = open(base_dir + sName,'w+')
#不加sleep_download_time保持隔一段时间一次爬取指定会出现(python socket.error: [Error
[python]
view plain
copy
#10054] 远程主机强迫关闭了一个现有的连接)
#加了貌似还会出现,呵呵,所以被迫写了递归函数,保证我能爬完所有的搜索结果
timeout = 10
socket.setdefaulttimeout(timeout)#这里对整个socket层设置超时时间。后续文件中如果再使用
[python]
view plain
copy
#到socket,不必再设置
sleep_download_time = 1
time.sleep(sleep_download_time) #这里时间自己设定
requests = urllib2.urlopen(url + str(i*10)) #这里是要读取内容的,不断变更的地址
content = requests.read()#读取,一般会在这里报异常,被爬取的网站强行断掉
#之前直接获取到网页内容,然后直接正则匹配发现始终只能拿到第一页的内容后面的没有了
#只能先下载下来,再正则再删去该网页,不知道哪位大神能给出解释
f.write(content)
f.close()
requests.close()#记得要关闭
except UnicodeDecodeError as e:
print('-----UnicodeDecodeError url:',url)
#继续调用爬取函数
cnpcMailSearch(bdurl,CONSTANT,end_page)
except urllib2.error.URLError as e:
print("-----urlError url:",url)
cnpcMailSearch(bdurl,CONSTANT,end_page)
except socket.timeout as e:
print("-----socket timout:",url)
cnpcMailSearch(bdurl,CONSTANT,end_page)
file_object = open(base_dir + sName)
try:
all_the_text = file_object.read()
mailAddress= p.findall(all_the_text)
f = open(r'E:\\test.txt','a')
for num in mailAddress:
s = str(num)
#在网页源代码里邮箱地址是这样的xxxxx<em>@xxxx.com.cn,没办法我得去掉<em>
s = s[:-16]+s[-12:]
f.write(s)
f.write('\n')
f.close()
finally:
file_object.close()
#即时删除下载的网页
os.remove(base_dir + sName)
#-------- 在这里输入参数 ------------------
#这是原始的搜索结果地址特别长,而且每翻一页地址都会变化,研究了一下,其实不需要&rsv_*这个东东,&连接的内容之间<span style="font-family: Arial, Helvetica, sans-serif;">显然无顺序要求</span>
[python]
view plain
copy
#http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=%40xxxx.com.cn&rsv_pq=f96adbb30000145f&
#rsv_t=a5db0FgY8cAll9kpqEfb2F9yqcfIoZRa0BxSyHghKZJU8PvXwrGXvlTzT10&rsv_enter=0&rsv_sug3=1&rsv_sug1=1&rsv_sug4=1167&rsv_sug=1
#所以改为以下地址,方便获取
bdurl = "http://www.baidu.com/s?wd=%40xxxx.com.cn&oq=%40xxxx.com.cn&tn=sitehao123&ie=utf-8&pn="
#设置起始页,终止页
begin_page = 0
end_page = 1000
#-------- 在这里输入参数 ------------------
#调用
MailSearch(bdurl,begin_page,end_page)
欢迎批评指正!
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报
。
打开APP,阅读全文并永久保存
查看更多类似文章
猜你喜欢
类似文章
【热】
打开小程序,算一算2024你的财运
python 爬虫基础(1)
Python爬虫
python爬虫详解
Python爬虫基础总结
盘点一道Python网络爬虫中使用正则表达式匹配字符的题目
Python爬虫从入门到精通(五)动态网页的挑战
更多类似文章 >>
生活服务
热点新闻
留言交流
回顶部
联系我们
分享
收藏
点击这里,查看已保存的文章
导长图
关注
一键复制
下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!
联系客服
微信登录中...
请勿关闭此页面
先别划走!
送你5元优惠券,购买VIP限时立减!
5
元
优惠券
优惠券还有
10:00
过期
马上使用
×