首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用Python批量爬取中国银行动态新闻

Hello各位,这是继上篇爬b站弹幕之后的第二篇应用。或许各位可能觉得爬弹幕不怎么正经,不过其实爬虫底层逻辑都是一样的,可以说是一招鲜,吃遍天,掌握基本逻辑基本就可以爬到所有的静态网页。昨天帮老板找了一些资料,ddl非常之急,然后自己写了一个爬虫。写着写着就会发现,写程序是为了加快工作效率,然而对于一个刚入门的人来说,写出来一大堆Bug不说,思考的过程和写的过程都非常累人,耗时极长。用pycharm这种实时调试功能并不是太好的IDE写就更不知道会怎么样了。最终很可能耗在编写的时间要远远大于自己手工找资料的时间。不过还好这次自己还是比较幸运的,不到两个小时爬到了712k的数据。先分享一下源码。

import requests

from bs4 import BeautifulSoup

import re

def getHTMLtext(url, code = 'utf-8'):

try:

r = requests.get(url, timeout = 100)

r.raise_for_status()

r.encoding = code

return r.text

except:

return ""

def parse_page(html):

content = getHTMLtext(html)

soup = BeautifulSoup(content, 'html.parser')

content = soup.find_all(name = 'div', attrs = {'class':'sub_con'})

soup1 = BeautifulSoup(str(content), 'html.parser')

string = soup1.find_all('p')

return string

def get_HTML(html):

content = getHTMLtext(html)

soup = BeautifulSoup(content, 'html.parser')

contents = soup.contents

pattern = re.compile(r'\d.\d.\d\.html')

lsts = re.findall(pattern, str(contents))

print(lsts)

lsts1 = []

for i in lsts:

page = r'http://www.boc.cn/aboutboc/bi1/' + i

lsts1.append(page)

return lsts1

def to_file(lst):

with open(r'C:/COD12/history/final.txt', 'a+', encoding = 'utf-8') as f:

for line in lst:

f.write(line)

start_url = 'http://www.boc.cn/aboutboc/bi1/index'

lst = [i+1 for i in list(range(20))]

list_of_pages = []

for i in lst:

url = start_url + '_' + str(i) + '.html'

list_of_pages.append(get_HTML(url))

print(list_of_pages)

for html in list_of_pages:

for number in html:

content = parse_page(number)

to_file(str(content))

和上次的爬虫对比一下就会发现改动会有但并不是很多,而且省去了传cookie的过程实际上简单很多,比较耗时的部分是正则表达式的规则。pattern = re.compile(r'\d.\d.\d\.html')表示6个数字,然后是2个任意字符,然后8个数字,一个任意字符,然后8个数字。

中行媒体页面的源码如下,实际上非常简单,每个新闻的标题旁边都跟了对应的url的一部分,这也使得正则表达式的应用变得舒服很多。get_HTML()函数干的活主要就是把当页所有新闻的url找出来,形成一个列表。

我让他在运行的时候print了一下,输出是这样的:

相当长的一段列表……因为我让他找了好十多页。

然后再定义一个parse_page()函数,用来在单个页面里找需要的正文信息。正文信息的标签属性并不独特,只是存在div标签下的一个p标签里,所以这里用了两次BeautifulSoup,一次定位到div,一次定位到这下面的p标签里。这里实际上是可以优化的……各位感兴趣可以自己写一下。

之后的事情就比较简单了,用for循环遍历列表逐一parse,然后将内容输出到文件里。

显然这个输出结果可以优化的部分非常非常多……但是用于搜索关键词定位文章位置而言完全是足够用的了。各位感兴趣的可以拿源码自己玩一玩,简化一下输出结果可以看得更清楚一些。能贴到评论区当然是最好的了。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181114G0LM2C00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券