Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Beautiful Soup(Python)在同一HTML上从多个位置抓取数据_Python_Html_Parsing_Web Scraping_Beautifulsoup - Fatal编程技术网

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

使用Beautiful Soup(Python)在同一HTML上从多个位置抓取数据,python,html,parsing,web-scraping,beautifulsoup,Python,Html,Parsing,Web Scraping,Beautifulsoup,我在用BeautifulSoup从某个URL抓取数据时遇到问题。 我已经成功地完成了代码打开带有URL列表的文本文件并遍历它们的部分。 我遇到的第一个问题是当我想浏览HTML页面上两个不同的位置时。 到目前为止,对于我编写的代码,它只经过第一个“类”,不想搜索和废弃我定义的另一个 第二个问题是,只有在终端中使用以下命令运行脚本时,才能获取数据: python mitel.py > mitel.txt 我得到的输出不是我想要的。我只是从中寻找两个字符串,但我找不到提取它的方法 最后,我无法

我在用BeautifulSoup从某个URL抓取数据时遇到问题。 我已经成功地完成了代码打开带有URL列表的文本文件并遍历它们的部分。 我遇到的第一个问题是当我想浏览HTML页面上两个不同的位置时。 到目前为止,对于我编写的代码,它只经过第一个“类”,不想搜索和废弃我定义的另一个

第二个问题是,只有在终端中使用以下命令运行脚本时,才能获取数据:

python mitel.py > mitel.txt
我得到的输出不是我想要的。我只是从中寻找两个字符串,但我找不到提取它的方法

最后,我无法将结果写入CSV。 我只将URL列表中最后一个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代码,因此我将在此处添加一个指向其中一个页面的链接,如果需要,我将尝试以某种方式粘贴它,尽管它非常大且复杂


提前非常感谢

在@furas和谷歌的帮助下,我获得了一些结果。 有了这段代码,我可以从页面中获得所有的“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])
它还使用代理。。分类。无法从.txt列表中获取代理


对于第一次python抓取来说还不错,但远没有达到我想象的效率。

在@furas和谷歌的帮助下,我成功地获得了一些结果。 有了这段代码,我可以从页面中获得所有的“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])
它还使用代理。。分类。无法从.txt列表中获取代理


对于第一次python抓取来说还不错,但远没有达到我想象的效率。

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

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

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

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

只能在
finalt=target.text.strip()中指定最后一个值。您必须使用list来保存所有值
finalt=[]
和更高版本的
finalt.append(target.text.strip())
要在HTML页面上获得两个分开的位置,您必须使用两个分开的
findall()
。您只分配
finalt=target.text.strip()
中的最后一个值。您必须使用list来保存所有值
finalt=[]
和更高版本的
finalt.append(target.text.strip())
要在HTML页面上获得两个分开的位置,您必须使用两个分开的
findall()