【发布时间】:2019-10-02 08:29:54
【问题描述】:
我的网页抓取脚本由于某种原因返回了重复的结果,我尝试了很多替代方案,但就是无法让它工作。有人可以帮忙吗?
import requests
from bs4 import BeautifulSoup as bs
from bs4.element import Tag
import csv
soup = [ ]
pages = [ ]
csv_file = open('444.csv', 'w')
csv_writer = csv.writer(csv_file)
csv_writer.writerow(['Practice', 'Practice Manager'])
for i in range(35899, 35909):
url = 'https://www.nhs.uk/Services/GP/Staff/DefaultView.aspx?id=' + str(i)
pages.append(url)
for item in pages:
page = requests.get(item)
soup.append(bs(page.text, 'lxml'))
business = []
for items in soup:
h1Obj = items.select('[class^=panel]:has([class^="gp notranslate"]:contains(""))')
for i in h1Obj:
tagArray = i.findChildren()
for tag in tagArray:
if isinstance(tag,Tag) and tag.name in 'h1':
business.append(tag.text)
else:
print('no-business')
names = []
for items in soup:
h4Obj = items.select('[class^=panel]:not(p):has([class^="staff-title"]:contains("Practice Manager"))')
for i in h4Obj:
tagArray = i.findChildren()
for tag in tagArray:
if isinstance(tag,Tag) and tag.name in 'h4':
names.append(tag.text)
else:
print('no-name')
print(business, names)
csv_writer.writerow([business, names])
csv_file.close()
它目前正在返回所有重复值。
它需要做的是每个 url 调用返回一个 'business' 和一个 'names' 值。如果没有 'business' 或 'name',则需要返回值 'no-business' 或 'no-name'。
谁能帮帮我?
【问题讨论】:
-
您是否只需要每个实践的实践经理?
-
基本上是的,但我还需要说明他们是哪个实践的经理,有些有多个经理,有些根本没有,所以它需要为那些说“无名” .
-
那么只有练习经理和如果多个返回多个?
-
是的,我也需要执业名称(企业名称),所以我知道他们来自哪里。
标签: python-3.x web-scraping beautifulsoup python-requests tags