使用BeautifulSoup抓取网页数据

最近由于在做深度学习的研究,需要自定义一些数据集,就编写一些网页数据搜集工具,一开始没有使用Scrapy这样工具,先拿BeautifulSoup练下手。

def getHTMLText(url):
    try:
        #ua = UserAgent(cache=False)
        
        #headers= {'User-Agent':str(ua.chrome)}
        
        headers= {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36",
                 'Host':"xxx.xxx.xxx",
                 'Referer':"http://www.xxx/xxx/"}
        
        r = requests.get(url,headers=headers, timeout=30)
        
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except: #异常处理
        return "产生异常"

UserAgent真的有点坑,运行报错。主要是连不上官网的列表,加一下
ua = UserAgent(use_cache_server=False)可以解决。
我考虑本地实现一个随机的列表维护UserAgent就足够了,又快又好。

home_url="http://xxx"
    url=home_url+"/xxx.html"
    
    f=open("d:/xxx.txt","w+",encoding='utf-8')
    num=1
    flag=1
    while flag>0:
        bs4= BeautifulSoup(getHTMLText(url),"html.parser")
        #for line in s.xpath('//div[@id="content"]/text()'):
        title=bs4.title
        content=bs4.find(id='content').get_text()
        content=re.sub("chaptererror();","",str(content))
        nxt=bs4.find('a',class_='next').get("href")
        if nxt.find("html")<0:
            flag=0
        else:
            url=home_url+nxt
            f.write(str(title)+"\n")
            f.write(str(content)+"\n")
            time.sleep(random.randint(5,15))
            if num%100==0:
                print("完成",num,"章")
                f.flush()
                time.sleep(5)
            num+=1

    f.close()

xpath和BeautifulSoup都可以使用,我用正则也习惯,xpath也可以接受。不过既然BeautifulSoup是专业爬虫工具,我也就顺应潮流。
做一个简单的循环翻页和文件写入。time.sleep这块也是最实用的方法做一个手工行为的模拟。
对于不用登录的数据,就这样搜集了,需要登录的应用考虑使用Selenium。毕竟我只是想安静的搜集一些必要的数据而已。

你可能感兴趣的:(使用BeautifulSoup抓取网页数据)