Python 3.6-在soup.findAll()字符串中找到一个单词

时间:2019-01-06 03:29:28

标签: python python-3.x beautifulsoup

这是我希望能帮助您的代码的基本示例:

from bs4 import BeautifulSoup
import requests
import csv

with open('URLs.csv', newline='') as f_urls:
csv_urls = csv.reader(f_urls)

for line in csv_urls:
    page = requests.get(line[0])
    soup = BeautifulSoup(page.text, 'html.parser')
    for results in soup.findAll('a', {'data-tn-element':'jobTitle'}):
        if "Scientist" in results:
            continue # Won't this continue just loop back to the for results in...loop, not the for line in csv_urls loop?
        else:
            print(results.text)

...其中CSV文件中的URL为:

https://www.indeed.ca/jobs?q=data+scientist%2C+data+analyst%2C+python&l=Canada&jt=fulltime&start=20
https://www.indeed.ca/jobs?q=data+scientist,+data+analyst,+python&l=Canada&jt=fulltime

...因此,在此代码的上下文中,它首先读取第一个URL,然后找到该页面上的所有职位。如果抓取的表中的任何职位包含单词“ Scientist”(其中的任何一个),则应继续回到“ for csv_urls:中的行”行,然后从列表中的下一个URL重新开始。如果它们不包含单词,则打印结果。

这是一个基本示例,不是我在实际代码中使用的示例,但是应用程序是相同的。我认为问题可能出在Continue的放置位置,因为我需要它跳回到“ csv_urls:中的for行”循环。

希望对于被投资者来说,这更像是“热门话题”。谢谢吗?

1 个答案:

答案 0 :(得分:1)

您必须致电.text或它不匹配

for line in csv_urls:
    page = requests.get(line[0])
    soup = BeautifulSoup(page.text, 'html.parser')
    for results in soup.findAll('a', {'data-tn-element':'jobTitle'}):
        if "Scientist" in results.text:
            break
            # stop this loop, continue to loop "csv_urls"
            # even the rest has no "Scientist"
        else:
            print(results.text)