使用python 2.7

时间:2017-02-20 11:02:59

标签: python css python-2.7 csv web-crawler

我正在尝试使用python 2.7中的抓取工具在网站的 CSS文件中找到特定的CSS媒体查询(@media only screen)。

现在,我可以抓取网站/网址(来自CSV文件),使用以下代码在 HTML源代码中查找特定关键字:

import urllib2

keyword = ['keyword to find']

with open('listofURLs.csv') as f:
    for line in f:
        strdomain = line.strip()
        if strdomain:
            req = urllib2.Request(strdomain.strip())
            response = urllib2.urlopen(req)
            html_content = response.read()

            for searchstring in keyword:
                if searchstring.lower() in str(html_content).lower():
                    print (strdomain, keyword, 'found')
f.close()

但是,我现在想要抓取网站/ ULR(来自CSV文件)以在其CSS文件/源代码中查找@media only screen查询。我的代码应该怎么样?

1 个答案:

答案 0 :(得分:0)

所以,你必须:

1°读取csv文件并将每个url放在Python列表中;

2°循环此列表,转到页面并提取css链接列表。您需要一个HTML解析器,例如BeautifulSoup;

3°浏览链接列表并提取您需要的项目。有一些CSS解析器,如tinycss或cssutils,但我从未使用它们。正则表达式可以做到这一点,即使可能不推荐这样做。

4°写结果

由于您知道如何阅读csv(PS:当您使用f.close()方法时不需要使用with open关闭文件),这里是操作2和3的最小建议。可以根据您的需求自由调整并改进它。我使用的是Python 3,但我认为它适用于Python 2.7。

import re
import requests
from bs4 import BeautifulSoup

url_list = ["https://76crimes.com/2014/06/25/zambia-to-west-dont-watch-when-we-jail-lgbt-people/"]

for url in url_list:
    try:
        response = requests.get(url)
        soup = BeautifulSoup(response.content, 'lxml')
        css_links = [link["href"] for link in soup.findAll("link") if "stylesheet" in link.get("rel", [])]
        print(css_links)
    except Exception as e:
        print(e, url)
        pass

css_links = ["https://cdn.sstatic.net/Sites/stackoverflow/all.css?v=d9243128ba1c"]

#your regular expression
pattern = re.compile(r'@media only screen.+?\}')

for url in css_links:
    try:
        response = requests.get(url).text
        media_only = pattern.findall(response)
        print(media_only)
    except Exception as e:
        print(e, url)
        pass