【发布时间】:2025-11-25 15:35:01
【问题描述】:
我正在从事一个网络抓取项目,该项目涉及根据搜索词从网站抓取 URL,将它们存储在 CSV 文件中(在单个列下),最后从这些链接中抓取信息并将它们存储在文本中文件。
我目前遇到两个问题。
- 只抓取前几个链接。我无法提取链接 从其他页面(网站包含加载更多按钮)。我不知道 如何在代码中使用 XHR 对象。
-
代码的后半部分只读取最后一个链接(存储在 csv 文件),抓取相应的信息并将其存储在 文本文件。它不会从一开始就遍历所有链接。 我无法弄清楚我在文件方面出了什么问题 处理和 f.seek(0)。
from pprint import pprint import requests import lxml import csv import urllib2 from bs4 import BeautifulSoup def get_url_for_search_key(search_key): base_url = 'http://www.marketing-interactive.com/' response = requests.get(base_url + '?s=' + search_key) soup = BeautifulSoup(response.content, "lxml") return [url['href'] for url in soup.findAll('a', {'rel': 'bookmark'})] results = soup.findAll('a', {'rel': 'bookmark'}) for r in results: if r.attrs.get('rel') and r.attrs['rel'][0] == 'bookmark': newlinks.append(r["href"]) pprint(get_url_for_search_key('digital advertising')) with open('ctp_output.csv', 'w+') as f: f.write('\n'.join(get_url_for_search_key('digital advertising'))) f.seek(0)读取 CSV 文件,抓取相应内容并存储在 .txt 文件中
with open('ctp_output.csv', 'rb') as f1: f1.seek(0) reader = csv.reader(f1) for line in reader: url = line[0] soup = BeautifulSoup(urllib2.urlopen(url)) with open('ctp_output.txt', 'a+') as f2: for tag in soup.find_all('p'): f2.write(tag.text.encode('utf-8') + '\n')
【问题讨论】:
-
为什么要使用美汤而不仅仅是lxml? *.com/questions/5493514/… --edit-- 因为升级了:*.com/questions/4967103/…
-
在
get_url_for_search_key期间,中间有一个return语句,这意味着该函数的其余部分(在return下)总是被忽略... -
@OferSadan 我尝试更改 return 语句的位置。但我无法附加新链接。只抓取前十个链接。
-
@RvdBerg 谢谢你。对它有一个很好的了解,但我不知道我必须对我的代码进行什么样的更改。
标签: python python-2.7 csv web-scraping beautifulsoup