使用webdriver爬取上交所数据

工作中经常需要采集一些网站上的表数据,之前都是手工一条一条记录。学完python总感觉用的太少,于是想到不妨用python做个小爬虫去爬取。

百度了下,使用Python爬取网页表数据怎么爬取,我再稍微修改下。结果尝试以后发现,百度的方法并不适用该网站。百度上的方式是使用BeautifulSoup去爬取,但这种方法只适合静态页面的表数据,如果表数据跟本文中提到的上交所的类似,是采用JS脚本动态生成的话,则无法使用。所以只能自己完全重写。之前做过一段时间的自动化,会使用webdriver,就用它了!
看了下页面表格的元素,还好,有规律可循。先写获取一个页面所有元素的文本内容的函数。

  # 存储编号
    table_num_array = browser.find_elements_by_xpath('//td[@class="td_no_break text-align-center"]')
    # 存储名称
    table_name_array = browser.find_elements_by_xpath('//td[@class="td_break_word_7 "]')
    # 存储状态
    table_status_array = browser.find_elements_by_xpath('//td[@class="td_break_word_2 "]')
    # 存储地区
    table_area_array = browser.find_elements_by_xpath('//td[@class="td_no_break pd_style "]')
    # 存储行业
    table_industry_array = browser.find_elements_by_xpath('//td[@class="td_break_word_3 "]')
    # 存储发行商
    table_stockbroker_array = browser.find_elements_by_xpath('//td[@class="td_break_word_9 "]')
    # 存储律所
    table_law_firm_array = browser.find_elements_by_xpath('//td[@class="td_break_word_8 "]')
    # 存储会计师事务所
    table_cpa_array = browser.find_elements_by_xpath('//td[@class="td_break_word "]')
    # 存储日期
    table_date_array = browser.find_elements_by_xpath('//td[@class="td_no_break "]')

接下来就是将爬取到的数据写入到文件当中了。

    output = ' '.join(list(s)).encode('utf-8')
    print output
    f.write(output+'\n')

# 获取需要翻页的页数
def get_pages():
    page_no_array = browser.find_elements_by_xpath('//a[@class="dataList1_container_paginationNumLink"]')
    return len(page_no_array)

最后,写一个main函数将代码整合

if __name__ == '__main__':
    pages = get_pages()
    f = open(file_name, 'wb')
    get_page()
    for k in range(pages):
        browser.find_element_by_xpath('//a[@class="paging_next"]').click()
        get_page()
    f.close()
    browser.quit()

最后说一下遇到的问题:
1、获取表格数据文本时,部分文本存在换行,去掉换行试错了很久,最后发现只能使用replace函数而无法使用strip函数去掉换行。这点以后要注意!

for i in range(len(table_num_array)):
    # 此处用replace函数去掉带<br>换行,不能用strip()函数
    s = table_num_array[i].text, table_name_array[i].text.replace('\n', ''), table_status_array[i].text.replace('\n',
                                                                                                                 ''), \
    table_area_array[i].text.replace('\n', ''), table_industry_array[i].text.replace('\n', ''), table_stockbroker_array[
        i].text.replace('\n', ''), table_law_firm_array[i].text.replace('\n', ''), table_cpa_array[i].text.replace('\n',
                                                                                                                   ''), \
    table_date_array[2 * i].text, table_date_array[2 * i + 1].text

    output = ' '.join(list(s)).encode('utf-8')
    print output
    f.write(output+'\n')

2、写入文本时,刚开始想写csv文件,于是百度了一个csv的写入方法,结果发现写入的文件每一个汉字都接一个空格,还有乱码的问题,最后放弃了,采用最原始的open ,write的方法搞定。

特此记录下此过程,以便以后跟踪学习进度。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值