首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在网页刮刀中使用多个网页

在网页刮刀中使用多个网页
EN

Stack Overflow用户
提问于 2016-01-11 09:42:49
回答 1查看 301关注 0票数 8

我一直在编写一些Python代码,以便能够从政府网站上获得到社交媒体帐户的链接,以便研究如何更容易地与市政府联系。我已经成功地修改了一些代码,使其在2.7中工作,它会打印到给定输入网站上的facebook、twitter、linkedin和google+的所有链接。我目前遇到的问题是,我不只是在一个网页上寻找链接,而是在大约200个网站的列表中,我有一个Excel文件。我没有将这类列表导入Python的经验,所以我想知道是否有人可以查看代码,并建议将所有这些web页面设置为base_url的适当方法(如果可能的话);

代码语言:javascript
复制
import cookielib

import mechanize

base_url = "http://www.amsterdam.nl"

br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.set_handle_robots(False)
br.set_handle_equiv(False)
br.set_handle_redirect(True)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent',
              'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
page = br.open(base_url, timeout=10)

links = {}
for link in br.links():
    if link.url.find('facebook')>=0 or link.url.find('twitter')>=0 or link.url.find('linkedin')>=0 or link.url.find('plus.google')>=0:
    links[link.url] = {'count': 1, 'texts': [link.text]}

# printing
for link, data in links.iteritems():
print "%s - %s - %s - %d" % (base_url, link, ",".join(data['texts']), data['count'])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-11 10:12:56

你说过你有一个excel文件,上面有所有网站的列表,对吗?因此,您可以将excel文件导出为一个csv文件,然后可以在您的python代码中读取该文件中的值。

以下是有关这方面的更多信息

下面是如何直接处理excel文件

你可以这样做:

代码语言:javascript
复制
import csv

links = []

with open('urls.csv', 'r') as csv_file:
    csv_reader = csv.reader(csv_file)
    # Simple example where only a single column of URL's is present
    links = list(csv_reader)

现在,links是所有URL的列表。然后,您可以在一个函数中循环遍历列表,该函数获取页面并抓取数据。

代码语言:javascript
复制
def extract_social_links(links):
    for link in links:
        base_url = link 

        br = mechanize.Browser()
        cj = cookielib.LWPCookieJar()
        br.set_cookiejar(cj)
        br.set_handle_robots(False)
        br.set_handle_equiv(False)
        br.set_handle_redirect(True)
        br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(),     max_time=1)
        br.addheaders = [('User-agent',
          'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
        page = br.open(base_url, timeout=10)

        links = {}
        for link in br.links():
            if link.url.find('facebook')>=0 or link.url.find('twitter')>=0 or     link.url.find('linkedin')>=0 or link.url.find('plus.google')>=0:
            links[link.url] = {'count': 1, 'texts': [link.text]}

        # printing
        for link, data in links.iteritems():
        print "%s - %s - %s - %d" % (base_url, link, ",".join(data['texts']), data['count'])

顺便说一句,您可能应该将if条件分开,以使它们更易读。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34718249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档