HWH

Concentrate on computer science,academic research

python爬虫抓取ccf列表中的论文

《python爬虫抓取ccf列表中的论文》

       ccf列表镇楼。

       本次爬虫的目标是,获取ccf列表中指定题目的论文(比如,抓取所有题目中含有blockchain的论文)

       代码如下:

main.py

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
from volume import *
from article import *
def getBsObj(pageUrl:str):
    try:
        html=urlopen(pageUrl)
    except:
        return None
    else:
        return BeautifulSoup(html)


fo=open("data.txt","w")
fo.writelines("ccf data\n")
fo.close()
mainPage="http://www.ccf.org.cn"
bsObj=getBsObj(mainPage+"/xspj/gyml/")
repeatUrl=set()#用于去掉重复的url爬取
repeatUrl.add(mainPage+"/xspj/gyml/")
for link in bsObj.find("div",{"class":"col-md-2"}).find_all("a"):
        href=mainPage+(link.attrs['href'])#拿到a标签里面的href属性值
        i=65
        if href not in repeatUrl:
            repeatUrl.add(href)
            bsObj=getBsObj(href)
            try:#加上trycatch语句,因为可以看到目录的最后一个是无关的“联系我们”
                print(str(link))
                for cate in bsObj.find_all("ul", class_="g-ul x-list3"):
                    print(chr(i))
                    for lin in cate.find_all("a"):
                        href = lin.attrs['href']
                        if href in repeatUrl:
                            continue
                        print(href)
                        print("#爬取volume页面")
                        repeatUrl.add(href)
                        list = getVolume(href)
                        for a in list:
                            if a in repeatUrl:
                                continue
                            print("#爬取文章页面")
                            repeatUrl.add(a)
                            article.getInfo(a)
                    i = i + 1


            except:#没有相关内容的跳过就好
                pass

main.py的作用是获取ccf列表中的所有分类的地址,然后执行后两个文件volume.py和article.py

volume.py:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
import main

def getVolume(url):
    bsObj = main.getBsObj(url)
    list = bsObj.find_all('a',text=re.compile("Volume.*"))  #获取分类链接中的所有的volume
    hrefs=[]
    for i in list:
        hrefs.append(i.get('href'))
    return hrefs

article.py:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
import main

class article(object):

    def getInfo(url):
        bsObj=main.getBsObj(url)
        fo=open("data.txt","a+")
        for i in bsObj.find_all(class_="entry article"):
            title=i.find(class_="title")
            title=title.get_text()#提取文本
            if 'blockchain' in title or 'Blockchain' in title:
                doi = i.find("a")  # 找到规律,直接拿第一个链接就是了,doi值隐藏在这个链接之后
                doi = doi.get("href")
                doi = str(doi)
                doi = doi.replace("http://", "")  # 除去链接头
                doi = doi.replace("https://", "")
                fo.writelines(title + "\n")
                fo.writelines(doi + "\n")
                fo.writelines(str(url))  #打印url  方便找到分类

        fo.close()

  1. 千千说道:

    哇,猴哥太强啦~ :surprised:

发表评论

电子邮件地址不会被公开。 必填项已用*标注