2017-02-20 7 views
1

の特定のCSSメディアクエリ(@media only screen)をpython 2.7のクローラを使用してウェブサイトのCSSファイルで検索しようとしています。PythonのウェブサイトからCSSメディアクエリを抽出する2.7

今、私は次のコードを使用して、そのHTMLソースコードで特定のキーワードを見つけるために、(CSVファイルから)のウェブサイト/ URLをクロールすることができます。しかし、私は今のウェブサイトをクロールしたい

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() 

を/ ULRs(CSVファイルから)を使用して、CSSファイル/ソースコード内の@media only screenクエリを検索します。私のコードはどのように見えますか?

答えて

0

だから、あなたがする必要があります。

1度は、CSVファイルを読み込み、Pythonのリストの各URLを置きます。

2度このリストをループすると、ページに行き、CSSのリンクのリストを抽出します。 BeautifulSoupのようなHTMLパーサが必要です。

3°リンクの一覧を参照し、必要な項目を抽出します。 tinycssやcssutilsのようなCSSパーサーがありますが、私は決して使っていません。たとえこれがおそらく推奨されないとしても、正規表現はおそらくトリックを行うことができます。あなたはCSV(PS:あなたはwith open方法を使用する場合f.close()でファイルを閉じるする必要はありません)を読み取る方法を知っているので

4°の結果

を書き、ここでの操作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 
関連する問題