作为一名资深技术员,我是经常使用爬虫工具来实现目标快速采集,下面就是我通过Python语言快速采集新闻的代码以及解释,希望能够给大家带来帮助。
直接上代码:
#!/usr/bin/env python3
# Author: veelion
import re
import time
import requests
import tldextract
def save_to_db(url, html):
# 保存网页到数据库,我们暂时用打印相关信息代替
print('%s : %s' % (url, len(html)))
def crawl():
# 1\. download baidu news
hub_url = 'http://news.baidu.com/'
res = requests.get(hub_url)
html = res.text
# 2\. extract news links
## 2.1 extract all links with 'href'
links = re.findall(r'href=[\'"]?(.*?)[\'"\s]', html)
print('find links:', len(links))
news_links = []
## 2.2 filter non-news link
for link in links:
if not link.startswith('http'):
continue
tld = tldextract.extract(link)
if tld.domain == 'baidu':
continue
news_links.append(link)
print('find news links:', len(news_links))
# 3\. download news and save to database
for link in news_links:
html = requests.get(link).text
save_to_db(link, html)
print('works done!')
def main():
while 1:
crawl()
time.sleep(300)
if __name__ == '__main__':
main()
简单解释一下上面的代码:
1、使用requests下载百度新闻首页;
2、先用正则表达式提取a标签的href属性,也就是网页中的链接;然后找出新闻的链接,方法是:假定非百度的外链都是新闻链接;
3、逐个下载找到的所有新闻链接并保存到数据库;保存到数据库的函数暂时用打印相关信息代替。
4、每隔300秒重复1-3步,以抓取更新的新闻。
以上代码能工作,但也仅仅是能工作,槽点多得也不是一点半点,那就让我们一起边吐槽边完善这个爬虫吧。
标签:__,links,Python,新闻,采集,html,link,print,news From: https://blog.51cto.com/u_13488918/5987015