将 fake_useragent 添加到 people_also_ask 模块

adding fake_useragent to people_also_ask module

我要刮google'people also ask questions/answer'。我正在使用以下模块成功完成。

pip install people_also_ask

问题是图书馆的配置使得没有人可以向 google 发送很多请求。我想每天发送 1000 个请求,为此我必须将 fake_useragent 添加到模块中。我尝试了很多,但是当我尝试将虚假用户代理添加到 header 时,它会出错。我不是专业人士,所以我一定是自己做错了。谁能帮我把 fake_useragent 添加到模块(people_also_ask)。这是获取 question/answer.

的工作代码
from encodings import utf_8
import people_also_ask as paa
from fake_useragent import UserAgent
ua = UserAgent()
while True:

    input("Please make sure the queries are in \query.txt file.\npress Enter to continue...")
    try:
        query_file = open("query.txt","r")
        queries = query_file.readlines()
        query_file.close()
        break
    except:
        print("Error with the query.txt file...")


for query in queries:

    res_file = open("result.csv","a",encoding="utf_8")

    try:
        query = query.replace("\n","")
    except:
        pass

    print(f'Searching for "{query}"')
    
    questions = paa.get_related_questions(query, 14)
    questions.insert(0,query)

    print("\n________________________\n")
    main_q = True
    for i in questions:

        i = i.split('?')[0]
        
        try:
            answer = str(paa.get_answer(i)['response'])
            if answer[-1].isdigit():
                answer = answer[:-11]
            print(f"Question:{i}?")
        except Exception as e:
            print(e)

        print(f"Answer:{answer}")


        if main_q:
            a = ""
            b = ""
            main_q = False
            
        else:
            a = "<h2>"
            b = "</h2>"

        res_file.writelines(str(f'{a}{i}?{b},"<p>{answer}</p>",'))

        print("______________________")

    print("______________________")
    res_file.writelines("\n")

    res_file.close()

print("\nSearch Complete.")
input("Press any key to Exit!")

这违反了 Google 的服务条款,也违反了 people_also_ask 软件包的意愿。此答案仅供教育之用。

您问为什么 fake_useragent 无法工作。它并没有被阻止工作,但是 people_also_ask 包只是没有实现任何调用来使用任何 fake_useragent 方法。您不能只导入一个包并期望另一个包开始使用它。您必须手动使包一起工作。

要做到这一点,您必须了解这 2 个包的工作原理。看看 the source code,你会发现你可以很容易地让它们协同工作。在请求任何数据之前,只需将 people_also_ask 中的常量 header 替换为 fake_useragent 生成的常量。

paa.google.HEADERS = {'User-Agent': ua.random} # replace the HEADER with a randomised HEADER from fake_useragent
questions = paa.get_related_questions(query, 14)

paa.google.HEADERS = {'User-Agent': ua.random} # replace the HEADER with a randomised HEADER from fake_useragent
answer = str(paa.get_answer(i)['response'])

注意: 并非所有用户代理都可以工作。 Google 根据用户代理不给出相关问题。这不是 fake_useragentpeople_also_ask package.

的错

为了稍微缓解这个问题,请确保调用 ua.update() 并且您也可以使用 fake_useragentsPR #122 来仅 select 最新的子集更有可能工作的用户代理,尽管您仍然会错过一些查询。 people_also_ask 软件包没有绕过或 work-around 来自 google

的限制是有原因的