import requests from lxml import etree import time import random path = r'D:\test\伏天氏\ ' headers = { "Referer": "https://www.ibiquges.com/0/951/", "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1" } def get_urls(): url = "https://www.ibiquges.com/0/951/" response = requests.get(url, headers=headers) response.encoding = 'utf-8' html = etree.HTML(response.text) # 所有章节的url列表 url_list = ['https://www.ibiquges.com' + x for x in html.xpath('//div[@id="list"]/dl/dd/a/@href')] return url_list def get_text(url): rep = requests.get(url, headers=headers) rep.encoding = 'utf-8' dom = etree.HTML(rep.text) name = dom.xpath('//div[@class="bookname"]/h1/text()')[0] text = dom.xpath('//div[@id="content"]/text()') with open(path + f'{name}.txt', 'w', encoding='utf-8') as f: for con in text: f.write(con) print(f'{name} 下载完成') def main(): urls = get_urls() for url in urls: get_text(url) time.sleep(random.randint(1, 3)) if __name__ == '__main__': main() 怎么限制下载数量
时间: 2024-04-19 15:23:40 浏览: 191
要限制下载数量,你可以在`main`函数中设置一个计数器,当计数器达到指定数量时,跳出循环停止下载。下面是修改后的代码示例:
```python
def main(limit):
urls = get_urls()
count = 0 # 初始化计数器
for url in urls:
get_text(url)
count += 1 # 每次下载完成后计数器加一
if count >= limit: # 当计数器达到指定数量时,跳出循环
break
time.sleep(random.randint(1, 3))
if __name__ == '__main__':
limit = 10 # 设置下载数量限制为10
main(limit)
```
在这个示例中,我设置了下载数量限制为10。你可以根据需求修改`limit`变量的值来设置你想要的下载数量。当计数器`count`达到`limit`时,循环会被中断,停止下载。
相关问题
代码如下: import requestsfrom lxml import etreeimport numpy as npheaders = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36", "Referer": "https://www.5iai.com/", "Origin": "https://www.5iai.com"}url = "https://www.5iai.com/api/job/list"response = requests.get(url, headers=headers)response.encoding = 'utf8'html = response.textroot = etree.HTML(html)node_list = root.xpath('//div[@class="jobInfo"]/a/text()')print(node_list)np.savetxt('daijing_list.txt', node_list, fmt='%s')
在你的代码中,你使用了requests和lxml库,向https://www.5iai.com/api/job/list发送了一个GET请求,以获取一个JSON格式的响应。然后,你将响应文本转换为了HTML文本,并使用XPath表达式从中提取了一些文本信息。最后,你将这些文本信息保存到了名为daijing_list.txt的文件中。
然而,根据你提供的代码,我无法确定为什么不能成功爬取数据。有几个可能的原因是:
1. URL不正确:确保URL链接正确,没有任何拼写错误或其他错误。
2. 网站反爬虫机制:网站可能已经采取了反爬虫机制,例如IP封锁、验证码、用户代理检测等。你可以尝试更改请求头来模拟正常的用户行为,以规避这些机制。
3. 爬取的数据不存在:检查XPath表达式是否正确,以确保你正在正确地解析HTML文本,并且正在获取正确的数据。
4. 网络连接问题:在某些情况下,网络连接可能会中断或失败,导致你无法成功爬取数据。你可以尝试使用try-except语句来处理这些异常情况,并重新尝试请求。
希望这些提示可以帮助你找到问题所在。
参考上述代码,爬取下面网页的数据: https://www.5iai.com/#/jobList
可以参考上述代码,在 headers 中添加 Referer 和 Origin 字段,同时修改 url 和 xpath 表达式,代码如下:
```
import requests
from lxml import etree
import numpy as np
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36",
"Referer": "https://www.5iai.com/",
"Origin": "https://www.5iai.com"
}
url = "https://www.5iai.com/api/job/list"
response = requests.get(url, headers=headers)
response.encoding = 'utf8'
html = response.text
root = etree.HTML(html)
node_list = root.xpath('//div[@class="jobInfo"]/a/text()')
print(node_list)
np.savetxt('daijing_list.txt', node_list, fmt='%s')
```
这样就可以爬取到该网页的数据并保存到本地的 daijing_list.txt 文件中。
阅读全文