前一阵有一个小需求,给一个网站url,需要抓取网站的标题与内容图片,他们后期转换为卡片。
由于是个小需求,用爬虫的话太重了,就考虑能不能找到python处理这个的第三方库,这样写好轮子也比较好扩展,最后在GitHub上找到了这个库:Extraction
下面来说说基本用法:
安装:
pip install extraction
操作:
import extraction
import requests
url ='https://www.zhihu.com/question/305280080'
html = requests.get(url).text
extracted = extraction.Extractor().extract(html,source_url=url)
print(extracted.title,extracted.description,extracted.url,extracted.image,extracted.feed)
print(extracted.titles,extracted.descriptions,extracted.urls,extracted.images,extracted.feeds)
这样就会获得网站的标题和图片了,简单吧!
别高兴太早,本人试了十几个国内访问较多的网站,发现有几个网站是获取不到图片的。包括新浪微博、最右、今日头条这几个网站。那怎么办呢?
可以重写Extractor,以下以今日头条网站为例:
分析了一下头条,发现标题、图片放在了js里,需要获得js才能获得,这里用js2py来解析js,不了解js2py的自行查找。
class TouTiaoTechnique(Technique):
def extract(self, html):
soup = BeautifulSoup(html, "lxml")
js_code = soup.find_all("script")[6].text
res = js2py.eval_js(js_code)
res = res.to_dict()
try:
url = res['articleInfo']['coverImg']
except (KeyError, ValueError):
url ='http://pic.51yuansu.com/pic3/cover/02/84/73/5a5f1ad302f54_610.jpg'
return {
'images': [url]
}
然后,把techniques改成自己写好的:
techniques = ["TouTiaoTechnique"]
extractor = extraction.Extractor(techniques=techniques).extract(html, source_url=url)
这样就可以了。
网友评论