【问题标题】:Loop over different webpages using Python使用 Python 遍历不同的网页
【发布时间】:2016-05-15 17:23:42
【问题描述】:

我目前正在学习大数据课程,但不太了解。对于一项任务,我想了解关于阿姆斯特丹的 TripAdvisor 论坛上讨论了哪些主题。我想创建一个 CSV 文件,包括主题、作者和每个主题的回复量。一些问题:

  1. 如何列出所有主题?我检查了所有页面的网站源代码,主题总是在'onclick="setPID(34603)' 后面注明,并以</a> 结尾。我试过 '(re.findall(r'onclick="setPID(34603)">(.*?)</a>', post)' 但它不起作用。
  2. 回复不在 cmet 部分中给出,而是在页面上的单独行中给出。如何进行循环并将所有回复附加到新变量?
  3. 如何循环播放前 20 页?我的代码中的 URL 仅包含第一页,提供 20 个主题。
  4. 我是在循环之前还是之后创建 CSV 文件?

这是我的代码:

from urllib import request
import re
import csv

topiclist=[]
metalist=[]

req = request.Request('https://www.tripadvisor.com/ShowForum-g188590-i60- 
Amsterdam_North_Holland_Province.html', headers={'User-Agent' : 
"Mozilla/5.0"})

tekst=request.urlopen(req).read()
tekst=tekst.decode(encoding="utf-8",errors="ignore").replace("\n"," ")
.replace("\t"," ")


topicsection=re.findall(r'<b><a(.*?)</div>',tekst)

topic=[]
for post in topicsection:
   topic.append(re.findall(r'onclick="setPID(34603)">(.*?)</a>', post)


author=[]
for post in topicsection: 
   author.append(re.findall(r'<a href="/members-forums/.*?">(.*?)</a>', 
   post))

replies=re.findall(r'<td class="reply rowentry.*?">(.*?)</td>',tekst)

【问题讨论】:

  • 尽管我不想这么说,但如果您正在抓取网页,使用xml.dom 可能会获得最好的运气

标签: python loops csv spyder


【解决方案1】:

Don't use regular expressions to parse HTML. 使用 html 解析器,例如 beautifulsoup。

例如-

from bs4 import BeautifulSoup
import requests

r = requests.get("https://www.tripadvisor.com/ShowForum-g188590-i60-Amsterdam_North_Holland_Province.html")
soup = BeautifulSoup(r.content, "html.parser") #or another parser such as lxml
topics = soup.find_all("a", {'onclick': 'setPID(34603)'})
#do stuff

【讨论】:

  • 查看this answerthis one了解原因
  • 感谢您添加链接!其实我早就在找第一个了。这是一个很好的答案。
  • 非常感谢!我确实也尝试过 BeautifulSoup,但使用了另一个代码。当我打印主题时,我确实可以看到它们,但仍然会在输出中获得指向主题的 URL。例如: 阿姆斯特丹节的味道 是否可以只打印“味道”阿姆斯特丹音乐节”?
  • 只需在 BS 对象上调用 .text。所以,如果你遍历topicsfor topic in topics: print(topic.text)
  • 这确实有效,太棒了!是否最好使用 Beautifulsoup 来循环浏览不同的页面?我尝试了这里解释的内容:stackoverflow.com/questions/27752860/… 但它似乎不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多