我正在尝试使用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
查询。我的代码应该怎么样?
答案 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