Python 跟踪易趣搜索结果中的单词频率

Python 跟踪易趣搜索结果中的单词频率,python,python-3.x,beautifulsoup,xml-parsing,Python,Python 3.x,Beautifulsoup,Xml Parsing,使用Python3.5,我想做的是通过生成链接转到ebay搜索的结果页面,将源代码保存为XML文档,并迭代每个列表,其中可能有1000个或更多。接下来,我想创建一个字典,其中包含每个列表标题中出现的每个单词(仅标题)及其相应的出现频率。例如,如果我搜索“honda civic”,结果中的30个是“honda civic点火开关”,我希望我的结果显示为 results={'honda':70,'civic':60,'Ignition':30,'switch':30,'jdm':15,'interi

使用Python3.5,我想做的是通过生成链接转到ebay搜索的结果页面,将源代码保存为XML文档,并迭代每个列表,其中可能有1000个或更多。接下来,我想创建一个字典,其中包含每个列表标题中出现的每个单词(仅标题)及其相应的出现频率。例如,如果我搜索“honda civic”,结果中的30个是“honda civic点火开关”,我希望我的结果显示为
results={'honda':70,'civic':60,'Ignition':30,'switch':30,'jdm':15,'interior':5}
等等等等

以下是我使用的链接:

我遇到的问题是,我只得到前50个结果,而不是通过不同的搜索选项可能得到的X,000个结果。有什么更好的方法可以做到这一点

我的代码是:

import requests
from bs4 import BeautifulSoup
from collections import Counter

r = requests.get(url)
myfile = 'c:/users/' + myquery
fw = open(myfile + '.xml', 'w')

soup = BeautifulSoup(r.content, 'lxml')
for item in soup.find_all('ul',{'class':'ListViewInner'}):
    fw.write(str(item))
fw.close()
print('...complete')

fr = open(myfile + '.xml', 'r')
wordfreq = Counter()
for i in fr:
    words = i.split()
    for i in words:
        wordfreq[str(i)] = wordfreq[str(i)] + 1

fw2 = open(myfile + '_2.xml', 'w')
fw2.write(str(wordfreq))
fw2.close() 

您将获得前50个结果,因为易趣每页显示50个结果。解决方案是一次解析一个页面。通过此搜索,您可以使用不同的url:

注意url中的一个参数
\u pgn=1
?这是当前显示的页面的编号。如果您提供的数字超过了搜索的页数,则在div中会显示一条错误消息,其class
“sm md”

因此,您可以执行以下操作:

page = 1
url = """http://www.ebay.com/sch/Car-Truck-Parts-/6030/i.html?_from=R40&LH_ItemCondition=4&LH_Complete=1&LH_Sold=1&_mPrRngCbx=1&_udlo=100&_udhi=700&_sop
  =16&_nkw=honda+%281990%2C+1991%2C+1992%2C+1993%2C+1994%2C+1995%2C+1996%2C+
  1997%2C+1998%2C+1999%2C+2000%2C+2001%2C+2002%2C+2003%2C+2004%2C+2005%29&
  _pgn="""+str(page)+"&_skc=50&rt=nc"

has_page = True

myfile = 'c:/users/' + myquery
fw = open(myfile + '.xml', 'w')

while has_page:
    r = requests.get(url)
    soup = BeautifulSoup(r.content, "lxml")
    error_msg = soup.find_all('p', {'class':"sm-md"})
    if len(error_msg) > 0:
        has_page = False
        continue
    for item in soup.find_all('ul',{'class':'ListViewInner'}):
        fw.write(str(item))
        page+=1

fw.close()

我只测试了输入页面和打印ul,效果很好

非常好!我认为这与网页有关,但我不确定,因为当我访问实际网站时,易趣会显示200个物品。我能打扰你问一下你是否知道我在哪里也能找到某种链接解码器?我还注意到链接中的一些参数似乎只在某些时候存在,我想找出原因。我非常感谢你的帮助!我不知道任何链接解码器。当您开始web开发时,您将习惯于检查url参数。网站没有明确说明te参数的作用,因为这些参数背后的逻辑是在后端生成的,但是你可以使用它们,看看会发生什么。参数在每个url上用“&”分隔。如果有帮助,你能标记为已回答吗?祝你好运