使用Beautiful Soup (Python)从同一HTML的多个位置抓取数据



我有问题,从某些URL抓取数据与美丽的汤。我已经成功地做了一部分,我的代码打开文本文件与URL的列表,并通过它们。我遇到的第一个问题是当我想浏览HTML页面上的两个不同位置时。对于我目前编写的代码,它只遍历第一个"类",而不想搜索和丢弃我定义的另一个"类"。

第二个问题是,只有当我在终端中运行脚本时,我才能获得数据:

python mitel.py > mitel.txt

我得到的输出不是我想要的。我只是从它寻找两个字符串,但我找不到一种方法来提取它。

最后,我没有办法让我的结果写入CSV。我只从URL -list中获取最后一个URL的最后一个字符串到我的CSV。

你能帮助Python初学者吗?

下面是我的脚本:

import urllib2  
from bs4 import BeautifulSoup
import csv  
import os
import itertools

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

with open('urllist.txt') as inf:
urls = (line.strip() for line in inf)
for url in urls:
    site = urllib2.urlopen(url)   
    soup = BeautifulSoup(site.read(), 'html.parser')
for target in soup.findAll(True, {"class":["tel-number", "tel-result     main"]}):
    finalt = target.text.strip()
    print finalt
with open('output_file.csv', 'wb') as f:
writer = csv.writer(f)
writer.writerows(finalt)

由于某些原因,我无法成功地粘贴目标HTML代码,所以我将在这里放置一个指向其中一个页面的链接,如果需要,我会尝试以某种方式粘贴它,尽管它非常大且复杂。

抓取的目标URL

提前谢谢你!

我在@furas和google的帮助下得到了一些结果。有了这段代码,我可以从页面上得到所有的"a",然后在MS Excel中,我可以删除除姓名和电话以外的所有内容。排序和其他的东西也在excel中完成……我想我是一个大的新手在一个脚本完成所有的事情。

import urllib2  
from bs4 import BeautifulSoup
import csv  
import os
import itertools
import requests

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

finalt = []
proxy = urllib2.ProxyHandler({'http': 'http://163.158.216.152:80'})
auth = urllib2.HTTPBasicAuthHandler()
opener = urllib2.build_opener(proxy, auth, urllib2.HTTPHandler)
urllib2.install_opener(opener)
with open('mater.txt') as inf:
    urls = (line.strip() for line in inf)
    for url in urls:
        site = urllib2.urlopen(url)
        soup = BeautifulSoup(site.read(), 'html.parser')
    for target in soup.findAll('a'):
        finalt.append( target.text.strip() )
        print finalt


with open('imena1-50.csv', 'wb') as f:
     writer = csv.writer(f)
     for i in finalt:
         writer.writerow([i])

它也使用proxy..排序。没有从。txt列表中获取代理。

对于第一次抓取python来说还不错,但远非我想象的那样高效。

也许你的选择器是错误的,试试这个

for target in soup.findAll(True, {"class":["tel-number",'tel-result-main']}):

最新更新