博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
爬虫苦训第一天,我的第一个爬虫!!!
阅读量:4949 次
发布时间:2019-06-11

本文共 2207 字,大约阅读时间需要 7 分钟。

''' 经历千辛万苦终于写成了自己的第一个爬虫,哇咔咔!抓取糗事段子里面的段子,循环抓取多页'''import urllib.requestimport sslimport reimport pickleweburl = "https://www.douban.com/" #设置请求头headers = {         'Accept': 'text/html, application/xhtml+xml, */*',         # 'Accept-Encoding': 'gzip, deflate',         'Accept-Language': 'zh-CN',         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '                  'Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6756.400 QQBrowser/10.3.2545.400',             'DNT': '1',         'Connection': 'Keep-Alive',         'Host': 'www.qiushibaike.com'    }def jokeCrawker(url):   #创建为经过验证的上下文    context = ssl._create_unverified_context()    req = urllib.request.Request(url=url, headers=headers)    response = urllib.request.urlopen(req, context=context)    #data = str(response.read())    data = response.read().decode("utf-8")    #. 不能匹配'\n',compole(pat, re.S),此处耽误了好久,无语了    pat = '
(.*?)
' re_joke = re.compile(pat, re.S) jokeList = re_joke.findall(data) jokeDict = {} for div in jokeList: #name,名称 pat = r'

(.*?)

' re_n = re.compile(pat, re.S) name = re_n.findall(div)[0] #words,说的段子 pat = '
\n
(.*?)' re_w = re.compile(pat, re.S) words = re_w.findall(div)[0] #处理多个换行,
,非(数字,字母,下划线,中文,以及中文标点符号) pat = '\\n{2,}|
|[^\d\u4e00-\u9fa5(\u3002|\uff1f|\uff01|\uff0c|\u3001|' \ '\uff1b|\uff1a|\u201c|\u201d|\u2018|\u2019|\uff08|\uff09|\u300a|' \ '\u300b|\u3008|\u3009|\u3010|\u3011|\u300e|\u300f|\u300c|\u300d|' \ '\ufe43|\ufe44|\u3014|\u3015|\u2026|\u2014|\uff5e|\ufe4f|\uffe5)*]' word = re.sub(pat, '', words) jokeDict[name] = word with open("F:/糗事段子/file/qiushi.txt", "a+") as fp: #还能同一存储到一个dict判断重复,然后在同一写入,就可以用'w',不过太占内存了 #以后还能索引,看是否覆盖(短时间内不会) for k, v in jokeDict.items(): info = str(k + "说:" + v + "\n") fp.write(info) return Truefor i in range(10): webur2 = "https://www.qiushibaike.com/text/page/" + str(i) + "/" jokeCrawker(webur2)

 

转载于:https://www.cnblogs.com/854594834-YT/p/10539711.html

你可能感兴趣的文章
[转] vue异步处理错误
查看>>
CSS 3D动画概述菜鸟级解读之一
查看>>
分布式系列文章 —— 从 ACID 到 CAP / BASE
查看>>
方法签名与方法重载
查看>>
cmake 变量
查看>>
[Programming Entity Framework] 第2章 探究实体数据模型(EDM)(一)
查看>>
shell环境
查看>>
Java调用C++类库--JNI
查看>>
gles和opengl版本对照表
查看>>
python netwokx环境搭建
查看>>
面向空实现类继承
查看>>
1303: Decimal
查看>>
奥数 --- 找规律 + 总结
查看>>
Android sendToTarget
查看>>
输出的巧妙思想(解题技巧)
查看>>
[学习] nofollow
查看>>
测试阶段的工作进度
查看>>
《将博客搬至CSDN》
查看>>
ExtJS 刷新后,默认选中刷新前最后一次选中的节点
查看>>
实现一个简单的shell(2)
查看>>