python3进阶学习总结——简单爬虫实现
程序员文章站
2022-05-28 23:25:10
...
从网上爬数据的过程包括:访问页面并获取页面的所有的内容——按照正则表达式筛选并把想要的数据分组——保存数据
①获取页面所有内容
import urllib.request
import sys
#设置访问登录网址
weburl="https://www.qiushibaike.com/textnew/page/2/?s=4985583"
#设置报头
webhead={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0'}
#构造request请求
req=urllib.request.Request(url=weburl,headers=webhead)
#发送request请求并获得响应
response=urllib.request.urlopen(req)
content = response.read()
#改变返回内容的编码
type = sys.getfilesystemencoding()
content = content.decode(type)
②使用正则表达式
import re
pattern = re.compile('<a href="/article/([0-9]*)" target="_blank" class=\'contentHerf\' >\n<div class="content">\n*<span>(.*?)</span>\n*</div>',0)
#特别说明一点,()表示筛选后的数据,先是用整个正则表达式筛选出数据,然后把()里匹配的内容留下
result = re.findall(pattern, content)
这里爬的是糗事百科的段子,网址如下:
https://www.qiushibaike.com/textnew/page/2/?s=4985583
在页面上右键——查看页面源代码,找代码规律,如下图所示:
我需要的是< a > 中的href属性的article后的编码,以及< span >中的中文内容,正则表达式如上代码所示。
测试正则表达式是否正确,可以使用正则表达式在线工具,如http://tool.chinaz.com/regex/
如下图所示
上面输入正则表达式,下面输入内容,如果能匹配的话,下面的内容会变成黄色
③保存数据
def saveTofile(name,content):
file=open(name+'.txt', 'w',1000000,'utf-8')
file.write(str(content))
file.close()
for item in result:
saveTofile(item[0], item[1])
这里需要强调一点的是:按照正则表达式筛选回来的数据可以看出数组中的数组
自写案例代码:
import urllib.request
import sys
import re
import os
def saveTofile(name,content):
if not os.path.exists('files'):
os.makedirs('files')
file=open('files/'+name+'.txt', 'w',1000000,'utf-8')
file.write(str(content))
file.close()
def getResponse():
#设置访问登录网址
weburl="https://www.qiushibaike.com/textnew/page/2/?s=4985583"
#设置报头
webhead={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0'}
#构造request请求
req=urllib.request.Request(url=weburl,headers=webhead)
#发送request请求并获得响应
response=urllib.request.urlopen(req)
content = response.read()
#改变返回内容的编码
type = sys.getfilesystemencoding()
content = content.decode(type)
#<a href="/article/([0-9]*)"[\s\S]*
pattern = re.compile('<a href="/article/([0-9]*)" target="_blank" class=\'contentHerf\' >\n<div class="content">\n*<span>(.*?)</span>\n*</div>',0)
result = re.findall(pattern, content)
for item in result:
saveTofile(item[0], item[1])
return "OK"
print(getResponse())
上一篇: Object.assign() 方法详解
下一篇: android:Navigation