【发布时间】:2020-11-01 16:10:32
【问题描述】:
目标是使用BeautifulSoup 抓取多个pages,其输入来自requests.get 模块。
步骤如下:
首先使用requests加载html
page = requests.get('https://oatd.org/oatd/' + url_to_pass)
然后,使用以下定义抓取html 内容:
def get_each_page(page_soup):
return dict(paper_author=page_soup.find(attrs={"itemprop": "name"}).text,
paper_title=page_soup.find(attrs={"itemprop": "name"}).text)
比如说,我们有一百个唯一的url要抓取 ['record?record=handle\:11012\%2F16478&q=eeg'] * 100,整个过程可以通过下面的代码完成:
import requests
from bs4 import BeautifulSoup as Soup
def get_each_page(page_soup):
return dict(paper_author=page_soup.find(attrs={"itemprop": "name"}).text,
paper_title=page_soup.find(attrs={"itemprop": "name"}).text)
list_of_url = ['record?record=handle\:11012\%2F16478&q=eeg'] * 100 # In practice, there will be 100 diffrent unique sub-href. But for illustration purpose, we purposely duplicate the url
all_website_scrape = []
for url_to_pass in list_of_url:
page = requests.get('https://oatd.org/oatd/' + url_to_pass)
if page.status_code == 200:
all_website_scrape.append(get_each_page(Soup(page.text, 'html.parser')))
但是,每个 url 都被请求并一次抓取一个,因此原则上很耗时。
我不知道是否有其他方法可以提高我不知道的上述代码的性能?
【问题讨论】:
-
看看
multithreading。 -
你也可以使用
gevent -
结帐aiohttp
-
看scrapy中的分布式爬虫-docs.scrapy.org/en/latest/topics/…
标签: python web-scraping beautifulsoup python-requests