我有下面的代码从特定的网站提取链接。在
from bs4 import BeautifulSoup
import urllib2, sys
import re
def jobsinghana():
site = "http://www.jobsinghana.com/jobs"
hdr = {'User-Agent' : 'Mozilla/5.0'}
req = urllib2.Request(site, headers=hdr)
mayday = urllib2.urlopen(req)
soup = BeautifulSoup(mayday)
jobs = soup.find_all('a', {'class' : 'hover'})
print str(jobs).strip('[]')
def modernghana():
site = "http://www.modernghana.com/GhanaHome/classifieds/list_classifieds.asp? menu_id=7&sub_menu_id=362&gender=&cat_id=173&has_price=2"
hdr = {'User-Agent' : 'Mozilla/5.0'}
req = urllib2.Request(site, headers=hdr)
jobpass = urllib2.urlopen(req)
soup = BeautifulSoup(jobpass)
jobs = soup.find_all('a', href = re.compile('show_classifieds'))
for a in jobs:
header = a.parent.find_previous_sibling('h3').text
a.string = header
print a
jobsinghana = jobsinghana()
modernghana = modernghana()
alllinks = open('content.html', 'w')
alllinks.write("\n".join((jobsinghana, modernghana)))
allinks.close()
最后3行假设将提取的链接写入文件,但我得到以下错误:
TypeError: sequence item 0: expected string, NoneType found
我还注意到,每当我运行程序时,代码都会再次提取所有链接,但由于大多数链接都是在代码运行的早期实例中提取的,所以我对在后续运行时只提取和附加新链接感兴趣。
你的函数都没有返回任何东西。默认情况下返回
None
,这会导致错误。在将
return
语句添加到函数中,而不是打印结果。您正在收集链接列表,因此需要更改代码以返回列表并将两个列表连接起来,或者将它们分别写入输出文件:如果您需要跳过之前找到的链接,则必须读入链接,最好是将其放入一个集合中,以便在再次扫描时进行测试:
^{pr2}$在读取链接的两个函数中,使用
if link in existing:
测试过滤掉existing
中已经存在的任何链接。在相关问题 更多 >
编程相关推荐