小白刚学习python爬虫,分享一下代码,正则爬取糗百。
本帖最后由 3651535042 于 2019-8-26 20:54 编辑有免费评分的。给下评分谢谢。攒点吾爱币去换教程!
今天学习的是正则,所以就用正则爬取了一下糗事百科。在保存为json文件
(第一次用正则,写的不好勿喷)。
用到的库,re(正则),requests(解析),json(保存json用的)
import re
import requests
from requests.exceptions import ConnectionError
import json
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
#get网站通用框架
def get_url(url):
try:
r=requests.get(url,headers=headers)
r.encoding='utf-8'
html=r.text
return html
# return r.content.decode()
except ConnectionError as e:
print('采集错误%d'%e)
def re_html(html):
contents=[]
#正则表示,获取内容
content=re.findall(r'<div class="cont.*?<span>(.*?)</span>.*?</div>',html,re.S)
#获取昵称
name=re.findall(r'<h2>(.*?)</h2>',html,re.S)
for i in content:
#把正文的<br/>标签替换成空,并添加到列表里
contents.append(i.replace('<br/>',''))
for a in range(len(name)):
data = {
'name':name,
'content':contents
}
datas = json.dumps(data,indent=4,ensure_ascii=False)
print(datas)
with open('糗事百科.json','a',encoding='utf8') as f:
f.write(datas)
def main():
for i in range(1,36):
#循环糗百每一页的网址
print('第%s页'%i)
url='https://www.qiushibaike.com/textnew/page/%s/?s=5222421'%i
data=get_url(url=url)
re_html(html=data)
if __name__ == '__main__':
main()
有哪里不懂的可以评论区问我。
不出意外的话,每天都会发一篇。
明天发斗图啦爬虫。
3651535042 发表于 2019-8-26 20:55
return r.content.decode() 这个可以代替那个r.encoding='utf-8' 但是不知道为什么到20页左右就会报错,就 ...
或许是r.content为空 空字符不能解码 ,,, 3651535042 发表于 2019-8-26 20:55
return r.content.decode() 这个可以代替那个r.encoding='utf-8' 但是不知道为什么到20页左右就会报错,就 ...
老哥看下私信 return r.content.decode() 这个可以代替那个r.encoding='utf-8' 但是不知道为什么到20页左右就会报错,就换成了r.encoding='utf-8' 有没有好的教程能分享下吗 楼上+111111111 有梦想人不睡觉 发表于 2019-8-26 21:02
有没有好的教程能分享下吗
我自己都没找到,都准备去某宝买了 - - 秋田犬 发表于 2019-8-26 21:07
楼上+111111111
我自己都没找到,都准备去某宝买了 - - 用的PYTHON几啊? 怎么入门啊{:1_908:} ArgentumPC 发表于 2019-8-26 21:14
用的PYTHON几啊?
python3.7
页:
[1]
2