爬取豆瓣出版社
import urllib.request
import re
# 发现会报错,当使用urllib模块访问https网站时,由于需要提交表单,而python3默认是不提交表单的,所以这时只需在代码中加上以下代码
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
data = urllib.request.urlopen("https://read.douban.com/provider/all").read().decode("utf-8")
pettern = '<div class="name">(.*?)</div>'
result = re.compile(pettern).findall(data)
print(f'出版社有:{result}')
此时报错 HTTP Error 418
“HTTP Error 418:”应该是网站的反爬程序返回的。
在使用浏览器访问网站时,访问请求中包含请求头。检测请求头是常见的反爬虫策略。
服务器通过检测请求头判断这次请求是不是人为的。
在程序上加入请求头,这样服务器就会认为这是一个从浏览器发出的人为请求:
修改程序
import urllib.request
import re
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
url='https://read.douban.com/provider/all'
#请求头
herders={
'User-Agent':'Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/537.36 (KHTML,like GeCKO) Chrome/45.0.2454.85 Safari/537.36 115Broswer/6.0.3',
'Referer':'https://read.douban.com/provider/all',
'Connection':'keep-alive'}
req = urllib.request.Request(url,headers=herders)
response = urllib.request.urlopen(req)
data = response.read().decode('utf8')
pettern = '<div class="name">(.*?)</div>'
result = re.compile(pettern).findall(data)
print(f'出版社有:{result}')
现在我们成功爬取到所有出版社,我们将爬取的出版社名称保存到excel里
import urllib.request
import re
import ssl
import xlwt
# 导入
from openpyxl import workbook # 写入Excel表所用
ssl._create_default_https_context = ssl._create_unverified_context
url='https://read.douban.com/provider/all'
#请求头
herders={
'User-Agent':'Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/537.36 (KHTML,like GeCKO) Chrome/45.0.2454.85 Safari/537.36 115Broswer/6.0.3',
'Referer':'https://read.douban.com/provider/all',
'Connection':'keep-alive'}
req = urllib.request.Request(url,headers=herders)
response = urllib.request.urlopen(req)
data = response.read().decode('utf8')
pettern = '<div class="name">(.*?)</div>'
result = re.compile(pettern).findall(data)
# 创建工作workbook
workbook = xlwt.Workbook()
# 创建工作表worksheet,填入表名
worksheet = workbook.add_sheet('表名')
# 在表中写入相应的数据
for i in range(len(result)):
worksheet.write(i, 0, label=result[i])
# 保存表
workbook.save('出版社.xls')
网友评论