小白第一个爬虫—爬取某杂志的pdf文件
初学爬虫,写的第一个脚本,整体能用但使用过程中有“Connection broken: InvalidChunkLength(got length b'', 0 bytes read)” 的报错,未能解决
# -*- coding: utf8 -*-
import requests
import re
# 创建下载函数
def download(link):
# obj = re.compile(r'<b>.*?<b>(?P<title>.*?)</b>',re.S)
# 匹配出下载pdf的正则表达式
obj1 = re.compile(r'<b>.*?create_pdf(?P<ull>.*?) target=',re.S)
# url = f'http://xxx/reader/issue_list'+{link}
# 获取网页源码
resp = requests.get(link)
res = resp.text
# 通过正则表达式获取网页中想要的内容
result = obj1.finditer(res)
# 为每篇文章的下载准备空列表
url_list = []
for it in result:
# 拼接出完整的下载连接,并放入列表中
new_url = 'http://xxx/reader/create_pdf'+it.group("ull")
url_list.append(new_url)
for urllist in url_list:
# 获取下载内容
new_resp = requests.get(urllist)
# 以网页中的file_no命名,因为没想出怎么同时匹配出名字和下载链接
name = urllist.split('?').split('&')
# 写入文件
with open(f'./download/{name}' + '.pdf', 'wb') as f:
f.write(new_resp.content)
print(f'{name}' +'下载完成!')
# 及时关闭响应,否则会因正在连接的过多导致程序终止
resp.close()
# 定义主程序运行的内容
def main():
obj2 = re.compile(r'reader/issue_list(?P<mlink>.*?)"', re.S)
url = 'http://xxx/index.aspx'
resp = requests.get(url)
res = resp.text
link_list = []
result = obj2.finditer(res)
for it in result:
# 获取每一期的地址装进列表中
linklist = 'http://xxx/reader/issue_list' + it.group('mlink')
link_list.append(linklist)
# 可以通过切片的方式下载想要的期数
link_list = link_list
resp.close()
for link in link_list:
download(link)
if __name__ == "__main__":
main() zhyy90 发表于 2022-9-30 13:49
中华流行病学杂志
http://chinaepi.icdc.cn/zhlxbx/ch/index.aspx
谢谢了,这就试一试 feiyu361 发表于 2022-9-30 11:24
胸弟,网站是多少?
中华流行病学杂志
http://chinaepi.icdc.cn/zhlxbx/ch/index.aspx 谢谢,学习了 谢谢 学习一下,感谢分享 胸弟,网站是多少? 学习中啊,哈哈 f'{} '表达式用的好 谢谢,好好学习。 这个教学不错,支持一下
页:
[1]
2