【发布时间】:2017-08-28 11:23:37
【问题描述】:
我用 python 编写了一个脚本来从 craigslist 中抓取五个项目的“姓名”和“电话”。我面临的问题是,当我运行我的脚本时,它只给出三个结果而不是五个结果。更具体地说,由于前两个链接在他们的页面中没有额外的链接(联系信息),所以他们不需要再次请求打开任何额外的页面。但是,没有(联系信息)链接的两个链接无法通过我的第二个函数中的“if ano_page_link:”语句渗透,并且永远不会被打印。如何修复这个漏洞,无论是否有电话号码,刮板都会打印所有五个结果。
我正在尝试的脚本:
import re ; import requests ; from lxml import html
base = "http://bangalore.craigslist.co.in"
url_list = [
'http://bangalore.craigslist.co.in/reb/d/flat-is-for-sale-at-cooke-town/6266183606.html',
'http://bangalore.craigslist.co.in/reb/d/prestige-sunnyside/6259128505.html',
'http://bangalore.craigslist.co.in/reb/d/jayanagar-2nd-block-4000-sft/6221720477.html',
'http://bangalore.craigslist.co.in/reb/d/prestige-ozone-type-3-r-villa/6259928614.html',
'http://bangalore.craigslist.co.in/reb/d/zed-homes-3-bedroom-flat-for/6257075793.html'
]
def get_link(medium_link):
response = requests.get(medium_link).text
tree = html.fromstring(response)
try:
name = tree.cssselect('span#titletextonly')[0].text
except IndexError:
name = ""
try:
link = base + tree.cssselect('a.showcontact')[0].attrib['href']
except IndexError:
link = ""
parse_doc(name, link)
def parse_doc(title, ano_page_link):
if ano_page_link:
page = requests.get(ano_page_link).text
tel = re.findall(r'\d{10}', page)[0] if re.findall(r'\d{10}', page) else ""
print(title, tel)
if __name__ == '__main__':
for link in url_list:
get_link(link)
我得到的结果:
Jayanagar 2nd Block, 4000 sft Plot for Sale 9845012673
PRESTIGE OZONE TYPE D 3 B/R VILLA FOR SALE 9611226364
T ZED HOMES 3 BEDROOM FLAT FOR SALE 9611226364
我期待的结果:
A Flat is for sale at Cooke Town
Prestige Sunnyside
Jayanagar 2nd Block, 4000 sft Plot for Sale 9845012673
PRESTIGE OZONE TYPE D 3 B/R VILLA FOR SALE 9611226364
T ZED HOMES 3 BEDROOM FLAT FOR SALE 9611226364
【问题讨论】:
-
您是否在
for循环中定义函数?为什么? -
对不起先生。我不应该有。我为这个演示做了这个。
-
按照安德森先生的建议修改。
标签: python python-3.x web-scraping web-crawler