记录一下摸索中总结的一些经验和踩过的一些坑,以后有需要时备查——

最基本操作,将网页熬成汤

session = requests.session()
resp = session.post(html_address)
html = resp.content.decode('utf-8')
soup = BeautifulSoup(html, 'lxml')

建立文件夹

path="E:\\本机文件夹\\"+folder #folder为抓取到的出版信息、刊期
if not os.path.exists(path):
    os.makedirs(path)

通过下载地址获得文件,保存在建立好的文件夹里

f=requests.get(Download_address)
file_name = "E:\\本机文件夹\\"+folder+"\\"+lecture+".pdf"
with open(file_name,"wb") as code:
    code.write(f.content)

新建文件夹,文件下载保存时经常会报错,一般是因为某些字符不支持,需要事先过滤一下

def validateTitle(title):
    rstr = r"[\/\\\:\*\?\"\<\>\|\  ]"  # '/ \ : * ? " < > | '
    new_title = re.sub(rstr, " ", title)
    new_title="".join(new_title.split())# 替换为下划线
    return new_title

指定标签去除

比如在这一段里,要保留<b>基于局部语义相关性的定义文本义原预测</b>,但是不要<b>Hot!</b>,怎么办呢?

python 查阅sci文章 python期刊文献_python 查阅sci文章


这一趴卡了我好久,看了N多个经验贴,最后用的最简单的这种,缺乏基本语法常识的我一开始老是以为这个操作跟find一样,试图用

contents=[s.extract() for s in soup('sup')]

结果一直得到相反的结果,后来不报希望的直接用了别人那里复制来的原代码,问题解决了!

[s.extract() for s in soup('sup')]
contents = soup.find_all('b') #论文标题

于是小白可以这样理解,对于soup.findsoup.find_all来说, 不管find得到了什么,soup还是之前的soup
但是[s.extract() for s in soup('sup')]运行过后,soup就不再是之前的soup,而是清除掉所有<sup>标签里面的内容之后的soup啦……

通过指定标签,获取上一级标签

为了实现按期自动抓取,通过“上一期”“下一期”图片来获取上下期的网址

python 查阅sci文章 python期刊文献_python 查阅sci文章_02


html代码如图

python 查阅sci文章 python期刊文献_爬虫_03


通过小图的链接定位到<img>标签,用到了find_parent()来定位img的上一级标签<a>,再用get('href')来获取相邻网页链接

next_page=soup.find('img',src='../../images/btn_previous.gif')
next_address=next_page.find_parent().get('href')

好啦,这一次的经验基本都在这里了,至少同样结构类型的期刊网站都能这样处理了
问题就是python运行这么慢呢?2个多小时啦,才从2020年进行到2013年……
听说python要运行快,涉及多线程、异步运行啥的,小白的理解能力估计挑战不了了
下次再说吧!