Python 爬取单个网页所需要加载的地址和CSS、JS文件地址

本文介绍如何用Python爬虫抓取单个网页的CSS、JS文件及URL。作者从测试角度出发,通过爬虫收集资源并尝试访问,遇到中文参数导致的400错误,尚未找到解决方案。

Python 爬取单个网页所需要加载的URL地址和CSS、JS文件地址

通过学习Python爬虫,知道根据正式表达式匹配查找到所需要的内容(标题、图片、文章等等)。而我从测试的角度去使用Python爬虫,希望爬取到访问该网页所需要的CSS、JS、URL,然后去请求这些地址,根据响应的状态码判断是否都可以成功访问。


代码

'''
Created on 2017-08-02  

@author: Lebb  
'''
import sys
import urllib2
import re
reload(sys)
sys.setdefaultencoding('utf-8')

url = "https://www.szrtc.cn/"
http = "http"
request = urllib2.Request(url,headers=Headers)
responsecode = None
errorcount = 0
itemurl = url

def getResponse():
    try:
        response = urllib2.urlopen(request)
    except urllib2.HTTPError,he:
        print he.code
    except urllib2.URLError,ue:
        print ue.reason
    else :
        return response.read().decode('utf-8')

def getUrl():
    html = getResponse()
    patterncss ='<link href="(.*?)"'
    patternjs = '<script src="(.*?)"'
    patternimg = '<img src="(.*?)"'
    patternpage = '<a.*?href="(.*?)"'
    patternonclick = "openQuestion.*?'(.*?)
<think>好的,用户想用Python编写爬虫来抓取WordPress网站的数据。首先,我需要回顾一下用户提供的引用内容,看看里面有没有有用的信息。引用2提到WordPress.org有自己的API,可以方便地获取插件、主题等信息,避免直接爬取网页。引用3则提到robots.txt禁止爬虫,需要关闭Scrapy的遵守协议设置。这可能涉及到绕过robots.txt,但需要注意法律道德问题。 接下来,我应该分步骤来回答用户的问题。首先,使用官方API是比较推荐的方法,因为更高效且不会给服务器带来负担。需要检查API的文档,看看有哪些可用的接口,比如获取插件列表、详情等。然后,用Python的requests库来调用这些API,解析返回的JSON数据。 如果用户需要的数据不在API中,可能需要直接爬取网页。这时候需要考虑使用Scrapy或BeautifulSoup。根据引用3,可能需要关闭Scrapy的ROBOTSTXT_OBEY设置。但必须提醒用户遵守网站规则,避免法律风险。 另外,引用1提到Python的应用广泛,包括爬虫,所以可以推荐用户学习相关的基础知识,比如HTTP请求、HTML解析、数据处理等。同时,要强调道德爬虫的重要性,比如设置合理的请求间隔,避免被封IP。 可能用户遇到的问题包括反爬机制,比如验证码、动态加载内容等。这时候可能需要使用Selenium或Scrapy-Splash来处理JavaScript渲染的页面。同时,保存数据可以用CSV、JSON或数据库,根据用户需求选择合适的存储方式。 最后,生成相关问题需要考虑用户可能遇到的后续问题,比如如何处理登录后的页面、如何应对网站结构变化、如何优化爬虫性能等。确保用户有一个全面的解决方案,并了解潜在的风险挑战。</think>### 分步解答:用Python实现WordPress网页数据爬取 #### 一、优先使用WordPress官方API(推荐方法) 1. **获取API接口地址** WordPress.org提供了公开的API接口,例如插件信息接口为: `https://api.wordpress.org/plugins/info/1.0/{插件名称}.json` 或批量获取插件列表: `https://api.wordpress.org/plugins/update-check/1.1/`[^2] 2. **Python调用API示例** ```python import requests # 获取单个插件信息 plugin_name = "akismet" response = requests.get(f"https://api.wordpress.org/plugins/info/1.0/{plugin_name}.json") data = response.json() print(f"插件作者:{data['author']},下载量:{data['downloaded']}") # 获取插件列表(需构造POST请求) payload = {"action": "query_plugins", "request": {"per_page": 100}} response = requests.post("https://api.wordpress.org/plugins/update-check/1.1/", json=payload) plugins_list = response.json()['plugins'] ``` #### 二、网页爬取方法(需谨慎) 1. **绕过robots.txt限制** 若必须爬取网页,需在Scrapy中修改设置: ```python # settings.py ROBOTSTXT_OBEY = False # 关闭遵守robots协议[^3] ``` 2. **使用BeautifulSoup解析页面** ```python import requests from bs4 import BeautifulSoup url = "https://wordpress.org/plugins/" response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # 提取插件名称链接 plugins = soup.select('article.plugin-card') for plugin in plugins: name = plugin.select_one('.entry-title a').text.strip() link = plugin.select_one('.entry-title a')['href'] print(f"{name}: {link}") ``` #### 三、注意事项 1. **遵守道德规范** - 添加请求头模拟浏览器访问: ```python headers = {'User-Agent': 'Mozilla/5.0'} requests.get(url, headers=headers) ``` - 设置请求间隔(建议≥2秒) - 避免高频访问导致服务器压力 2. **处理动态内容** 对使用JavaScript渲染的页面,需配合Selenium: ```python from selenium import webdriver driver = webdriver.Chrome() driver.get("https://wordpress.org/themes/") dynamic_content = driver.find_element_by_css_selector('.theme-list') ``` #### 四、数据存储 ```python import csv with open('plugins.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.writer(f) writer.writerow(['名称', '作者', '下载量']) writer.writerow([data['name'], data['author'], data['downloaded']]) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值