ParitKansal commited on
Commit
f96e5ac
·
1 Parent(s): 0a8772a

Add all files

Browse files
Files changed (35) hide show
  1. __pycache__/jsonToText.cpython-311.pyc +0 -0
  2. __pycache__/llm.cpython-311.pyc +0 -0
  3. jsonToText.py +12 -0
  4. llm.py +102 -0
  5. main.py +124 -0
  6. organize.json +1242 -0
  7. output.txt +2595 -0
  8. requirements.txt +7 -0
  9. webscraper/markdown_files/default.md +338 -0
  10. webscraper/scrapy.cfg +12 -0
  11. webscraper/webscraper/__init__.py +0 -0
  12. webscraper/webscraper/__pycache__/__init__.cpython-311.pyc +0 -0
  13. webscraper/webscraper/__pycache__/__init__.cpython-312.pyc +0 -0
  14. webscraper/webscraper/__pycache__/items.cpython-311.pyc +0 -0
  15. webscraper/webscraper/__pycache__/items.cpython-312.pyc +0 -0
  16. webscraper/webscraper/__pycache__/middlewares.cpython-311.pyc +0 -0
  17. webscraper/webscraper/__pycache__/middlewares.cpython-312.pyc +0 -0
  18. webscraper/webscraper/__pycache__/pipelines.cpython-311.pyc +0 -0
  19. webscraper/webscraper/__pycache__/pipelines.cpython-312.pyc +0 -0
  20. webscraper/webscraper/__pycache__/settings.cpython-311.pyc +0 -0
  21. webscraper/webscraper/__pycache__/settings.cpython-312.pyc +0 -0
  22. webscraper/webscraper/items.py +12 -0
  23. webscraper/webscraper/markdown_files/default.md +202 -0
  24. webscraper/webscraper/middlewares.py +215 -0
  25. webscraper/webscraper/pipelines.py +109 -0
  26. webscraper/webscraper/scraped.json +0 -0
  27. webscraper/webscraper/settings.py +49 -0
  28. webscraper/webscraper/spiders/__init__.py +4 -0
  29. webscraper/webscraper/spiders/__pycache__/__init__.cpython-311.pyc +0 -0
  30. webscraper/webscraper/spiders/__pycache__/__init__.cpython-312.pyc +0 -0
  31. webscraper/webscraper/spiders/__pycache__/temp.cpython-312.pyc +0 -0
  32. webscraper/webscraper/spiders/__pycache__/websiteSpider copy.cpython-312.pyc +0 -0
  33. webscraper/webscraper/spiders/__pycache__/websiteSpider.cpython-311.pyc +0 -0
  34. webscraper/webscraper/spiders/__pycache__/websiteSpider.cpython-312.pyc +0 -0
  35. webscraper/webscraper/spiders/websiteSpider.py +43 -0
__pycache__/jsonToText.cpython-311.pyc ADDED
Binary file (1.04 kB). View file
 
__pycache__/llm.cpython-311.pyc ADDED
Binary file (6.19 kB). View file
 
jsonToText.py ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+
3
+ def convert_json_to_text(json_path, text_path):
4
+ # Read JSON data from file
5
+ with open(json_path, 'r') as json_file:
6
+ data = json.load(json_file)
7
+
8
+ # Open a text file for writing
9
+ with open(text_path, 'w') as text_file:
10
+ for item in data:
11
+ # Write only the extracted_content to the text file with a newline character
12
+ text_file.write(f"{item['extracted_content']}\n")
llm.py ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import re
3
+ import json
4
+ from groq import Groq
5
+
6
+ def process_and_save_json(input_file_path, output_file_path, api_key, chunk_size=2048, overlap_size=256, model="llama3-8b-8192", about='Events', details=['name', 'details']):
7
+ """
8
+ Processes the input file in overlapping chunks, interacts with the model, and saves the JSON output to a file.
9
+
10
+ Parameters:
11
+ input_file_path (str): Path to the input file containing data.
12
+ output_file_path (str): Path to the output JSON file.
13
+ api_key (str): Groq API key for authentication.
14
+ chunk_size (int): Size of each chunk of data.
15
+ overlap_size (int): Number of characters to overlap between chunks.
16
+ model (str): Model identifier to use for processing.
17
+ about (str): Description of the data for the model.
18
+ details (list or str): List of column names expected in the output JSON or a specific condition.
19
+ """
20
+ # Initialize the Groq client with the provided API key
21
+ client = Groq(api_key=api_key)
22
+
23
+ def read_file_in_chunks(file_path, chunk_size, overlap_size):
24
+ """Reads the file in chunks of a specified size with overlapping."""
25
+ with open(file_path, 'r', encoding='utf-8') as f:
26
+ buffer = f.read()
27
+ start = 0
28
+ while start < len(buffer):
29
+ end = start + chunk_size
30
+ yield buffer[start:end]
31
+ start = end - overlap_size # Move the start point for the next chunk
32
+
33
+ def extract_text_between_braces(text):
34
+ """Extracts and returns all text between curly braces."""
35
+ matches = re.findall(r'\{.*?\}', text, re.DOTALL)
36
+ return matches
37
+
38
+ def ensure_strings_in_json(data):
39
+ """Ensure that all values in JSON are strings."""
40
+ if isinstance(data, dict):
41
+ return {k: str(v) if not isinstance(v, (dict, list)) else ensure_strings_in_json(v) for k, v in data.items()}
42
+ elif isinstance(data, list):
43
+ return [ensure_strings_in_json(item) for item in data]
44
+ return str(data)
45
+
46
+ def process_chunk(client, chunk, model, about, details):
47
+ """Sends a chunk to the model and returns the completion."""
48
+
49
+ system_message = (
50
+ f"You are a helpful assistant for cleaning and organizing the data. \n"
51
+ f"This data is about {about}. \n"
52
+ f"Output should be well organized in the form of JSON with the following columns: {', '.join(details)}.\n"
53
+ f"Do not add extra details apart from JSON.\n"
54
+ f"If there is no such data, return an empty list.\n"
55
+ )
56
+
57
+ completion = client.chat.completions.create(
58
+ model=model,
59
+ messages=[
60
+ {
61
+ "role": "system",
62
+ "content": system_message
63
+ },
64
+ {
65
+ "role": "user",
66
+ "content": chunk
67
+ }
68
+ ],
69
+ temperature=1,
70
+ max_tokens=8192,
71
+ top_p=1,
72
+ stream=False,
73
+ stop=None,
74
+ )
75
+
76
+ # Accessing the message content using dot notation
77
+ return completion.choices[0].message.content
78
+
79
+ combined_output = []
80
+
81
+ # Read and process the file in chunks
82
+ for chunk in read_file_in_chunks(input_file_path, chunk_size, overlap_size):
83
+ output = process_chunk(client, chunk, model, about, details)
84
+ # Extract all text between curly braces from each chunk output
85
+ brace_texts = extract_text_between_braces(output)
86
+ for brace_text in brace_texts:
87
+ try:
88
+ # Parse JSON and ensure all values are strings
89
+ json_data = json.loads(brace_text)
90
+ json_data = ensure_strings_in_json(json_data)
91
+ combined_output.append(json_data)
92
+ except json.JSONDecodeError:
93
+ print("+++++++++++++++++++++++++++++++++++++++++++++++++")
94
+ print("Invalid JSON format in extracted text:")
95
+ print(brace_text)
96
+ print("+++++++++++++++++++++++++++++++++++++++++++++++++")
97
+
98
+ # Output the combined result to a JSON file
99
+ with open(output_file_path, 'w', encoding='utf-8') as f:
100
+ json.dump(combined_output, f, indent=4)
101
+
102
+ print(f"Processing complete. Output saved to '{output_file_path}'.")
main.py ADDED
@@ -0,0 +1,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import subprocess
3
+ import os
4
+
5
+ from jsonToText import convert_json_to_text
6
+ from llm import process_and_save_json
7
+
8
+ # Default XPath if not provided by the user
9
+ DEFAULT_XPATH = '//body' # You can change this to whatever default XPath you prefer
10
+
11
+ # Function to update the spider with user inputs and run it
12
+ def run_spider(website_url, xpath):
13
+ # Extract domain from the website URL
14
+ domain = website_url.split("//")[-1].split("/")[0]
15
+
16
+ # Update the spider file with user input (start_urls, custom_xpath, and allowed_domains)
17
+ spider_path = 'webscraper/webscraper/spiders/websiteSpider.py'
18
+
19
+ # Read the spider file
20
+ with open(spider_path, 'r') as file:
21
+ spider_code = file.readlines()
22
+
23
+ # Modify start_urls, custom_xpath, and allowed_domains
24
+ for idx, line in enumerate(spider_code):
25
+ if line.strip().startswith('start_urls ='):
26
+ spider_code[idx] = f' start_urls = ["{website_url}"]\n'
27
+ if line.strip().startswith('custom_xpath ='):
28
+ spider_code[idx] = f' custom_xpath = "{xpath}"\n'
29
+ if line.strip().startswith('allowed_domains ='):
30
+ spider_code[idx] = f' allowed_domains = ["{domain}"]\n'
31
+
32
+ # Write back the modified spider code
33
+ with open(spider_path, 'w') as file:
34
+ file.writelines(spider_code)
35
+
36
+ # Run the Scrapy spider using subprocess
37
+ scrapy_command = f'scrapy crawl websiteSpider'
38
+ spider_dir = 'webscraper/webscraper' # Set the directory where the spider is located
39
+ subprocess.run(scrapy_command, cwd=spider_dir, shell=True)
40
+
41
+
42
+ # Streamlit UI
43
+ st.title('Web Scraper Interface')
44
+
45
+ # User input for website link and XPath
46
+ website_url = st.text_input('Enter the website URL:', '')
47
+ xpath = st.text_input('Enter the XPath:', DEFAULT_XPATH) # Default XPath if not provided
48
+
49
+ # Variable to check if spider has been run
50
+ spider_ran = False
51
+
52
+ # Button to run the spider
53
+ if st.button('Run Spider'):
54
+ if website_url:
55
+ st.write(f'Running the spider on {website_url} using XPath: {xpath}')
56
+ run_spider(website_url, xpath)
57
+ st.success('Spider finished running!')
58
+ convert_json_to_text("webscraper/webscraper/scraped.json", "output.txt")
59
+ spider_ran = True
60
+ else:
61
+ st.error('Please provide a website URL.')
62
+
63
+ # If spider has been run, show download buttons
64
+ if spider_ran or os.path.exists("webscraper/webscraper/scraped.json"):
65
+ # Add an option to download the output.txt file
66
+ with open("output.txt", "r") as file:
67
+ st.download_button(
68
+ label="Download Output Text",
69
+ data=file,
70
+ file_name="output.txt",
71
+ mime="text/plain"
72
+ )
73
+
74
+ # Add an option to download the scraped.json file
75
+ with open("webscraper/webscraper/scraped.json", "r") as json_file:
76
+ st.download_button(
77
+ label="Download Scraped JSON",
78
+ data=json_file,
79
+ file_name="scraped.json",
80
+ mime="application/json"
81
+ )
82
+
83
+ # Title for organizing section
84
+ st.title("Do you want to organize the scraped data?")
85
+
86
+ # Use session state to track if the user has clicked "Yes"
87
+ if "organize_requested" not in st.session_state:
88
+ st.session_state.organize_requested = False
89
+
90
+ # Button to toggle the organize section
91
+ if st.button("Yes"):
92
+ st.session_state.organize_requested = True
93
+
94
+ # If user clicked "Yes", show input for 'about', 'API key', and organize button
95
+ if st.session_state.organize_requested:
96
+ # Input for 'about' to describe the data for organizing
97
+ about = st.text_input('Enter one or two words that describe the data like "books" or "events":', '')
98
+
99
+ # Input for custom details to organize the data (e.g., name, price, stock)
100
+ details = st.text_input('Enter the details to extract (comma separated) like name, date', '')
101
+
102
+ # Input for the API key
103
+ api_key = st.text_input('Enter your Groq API key:', type="password")
104
+
105
+ # Button to organize and save JSON
106
+ if st.button("Organize"):
107
+ if about and details and api_key:
108
+ # Convert comma-separated details into a list
109
+ details_list = [detail.strip() for detail in details.split(',')]
110
+
111
+ # Process and save the JSON with the provided details and API key
112
+ process_and_save_json("output.txt", "organize.json", api_key=api_key, about=about, details=details_list)
113
+ st.success('Data has been organized and saved to organize.json.')
114
+
115
+ # Add an option to download the organized JSON file
116
+ with open("organize.json", "r") as organized_json_file:
117
+ st.download_button(
118
+ label="Download Organized JSON",
119
+ data=organized_json_file,
120
+ file_name="organize.json",
121
+ mime="application/json"
122
+ )
123
+ else:
124
+ st.error('Please provide a description, details, and your API key before organizing.')
organize.json ADDED
@@ -0,0 +1,1242 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "booksName": "A Light in the ...",
4
+ "Price": "51.77",
5
+ "InStock": "True"
6
+ },
7
+ {
8
+ "booksName": "Tipping the Velvet",
9
+ "Price": "53.74",
10
+ "InStock": "True"
11
+ },
12
+ {
13
+ "booksName": "Soumission",
14
+ "Price": "50.1",
15
+ "InStock": "True"
16
+ },
17
+ {
18
+ "booksName": "Sharp Objects",
19
+ "Price": "47.82",
20
+ "InStock": "True"
21
+ },
22
+ {
23
+ "booksName": "Sapiens: A Brief History ...",
24
+ "Price": "54.23",
25
+ "InStock": "True"
26
+ },
27
+ {
28
+ "booksName": "The Requiem Red",
29
+ "Price": "22.65",
30
+ "InStock": "True"
31
+ },
32
+ {
33
+ "booksName": "The Dirty Little Secrets ...",
34
+ "Price": "33.34",
35
+ "InStock": "True"
36
+ },
37
+ {
38
+ "booksName": "The Coming Woman: A ...",
39
+ "Price": "17.93",
40
+ "InStock": "True"
41
+ },
42
+ {
43
+ "booksName": "The Boys in the ...",
44
+ "Price": "22.6",
45
+ "InStock": "True"
46
+ },
47
+ {
48
+ "booksName": "The Black Maria",
49
+ "Price": "52.15",
50
+ "InStock": "True"
51
+ },
52
+ {
53
+ "booksName": "Starving Hearts (Triangular Trade ...",
54
+ "Price": "13.99",
55
+ "InStock": "True"
56
+ },
57
+ {
58
+ "booksName": "Shakespeare's Sonnets",
59
+ "Price": "20.66",
60
+ "InStock": "True"
61
+ },
62
+ {
63
+ "booksName": "Set Me Free",
64
+ "Price": "17.46",
65
+ "InStock": "True"
66
+ },
67
+ {
68
+ "booksName": "Scott Pilgrim's Precious Little ...",
69
+ "Price": "52.29",
70
+ "InStock": "True"
71
+ },
72
+ {
73
+ "booksName": "Rip it Up and ...",
74
+ "Price": "35.02",
75
+ "InStock": "True"
76
+ },
77
+ {
78
+ "booksName": "Our Band Could Be ...",
79
+ "Price": "57.25",
80
+ "InStock": "True"
81
+ },
82
+ {
83
+ "booksName": "Olio",
84
+ "Price": "23.88",
85
+ "InStock": "True"
86
+ },
87
+ {
88
+ "booksName": "Mesaerion: The Best Science ...",
89
+ "Price": "37.59",
90
+ "InStock": "True"
91
+ },
92
+ {
93
+ "booksName": "Libertarianism for Beginners",
94
+ "Price": "51.33",
95
+ "InStock": "True"
96
+ },
97
+ {
98
+ "booksName": "It's Only the Himalayas",
99
+ "Price": "45.17",
100
+ "InStock": "True"
101
+ },
102
+ {
103
+ "booksName": "The Bulletproof Diet: Lose ...",
104
+ "Price": "49.05",
105
+ "InStock": "True"
106
+ },
107
+ {
108
+ "booksName": "Eat Fat, Get Thin",
109
+ "Price": "54.07",
110
+ "InStock": "True"
111
+ },
112
+ {
113
+ "booksName": "10-Day Green Smoothie Cleanse: ...",
114
+ "Price": "49.71",
115
+ "InStock": "True"
116
+ },
117
+ {
118
+ "booksName": "The Art and Science ...",
119
+ "Price": "52.98",
120
+ "InStock": "True"
121
+ },
122
+ {
123
+ "booksName": "Suzie Snowflake: One beautiful ...",
124
+ "Price": "54.81",
125
+ "InStock": "True"
126
+ },
127
+ {
128
+ "booksName": "Libertarianism for Beginners",
129
+ "Price": "51.33",
130
+ "InStock": "True"
131
+ },
132
+ {
133
+ "booksName": "The Art and Science ...",
134
+ "Price": "52.98",
135
+ "InStock": "True"
136
+ },
137
+ {
138
+ "booksName": "Suzie Snowflake: One beautiful ...",
139
+ "Price": "54.81",
140
+ "InStock": "True"
141
+ },
142
+ {
143
+ "booksName": "Libertarianism for Beginners",
144
+ "Price": "51.33",
145
+ "InStock": "True"
146
+ },
147
+ {
148
+ "booksName": "Why the Right Went ...",
149
+ "Price": "52.65",
150
+ "InStock": "True"
151
+ },
152
+ {
153
+ "booksName": "Equal Is Unfair: America's ...",
154
+ "Price": "56.86",
155
+ "InStock": "True"
156
+ },
157
+ {
158
+ "booksName": "Dark Notes",
159
+ "Price": "19.19",
160
+ "InStock": "True"
161
+ },
162
+ {
163
+ "booksName": "Amid the Chaos",
164
+ "Price": "36.58",
165
+ "InStock": "True"
166
+ },
167
+ {
168
+ "booksName": "The Grownup",
169
+ "Price": "35.88",
170
+ "InStock": "True"
171
+ },
172
+ {
173
+ "booksName": "The Long Shadow of ...",
174
+ "Price": "10.97",
175
+ "InStock": "True"
176
+ },
177
+ {
178
+ "booksName": "Silence in the Dark ...",
179
+ "Price": "58.33",
180
+ "InStock": "True"
181
+ },
182
+ {
183
+ "booksName": "All the Light We ...",
184
+ "Price": "29.87",
185
+ "InStock": "True"
186
+ },
187
+ {
188
+ "booksName": "The Girl You Left ...",
189
+ "Price": "15.79",
190
+ "InStock": "True"
191
+ },
192
+ {
193
+ "booksName": "Logan Kade (Fallen Crest ...",
194
+ "Price": "13.12",
195
+ "InStock": "True"
196
+ },
197
+ {
198
+ "booksName": "(Un)Qualified: How God Uses ...",
199
+ "Price": "54.0",
200
+ "InStock": "True"
201
+ },
202
+ {
203
+ "booksName": "Crazy Love: Overwhelmed by ...",
204
+ "Price": "47.72",
205
+ "InStock": "True"
206
+ },
207
+ {
208
+ "booksName": "Blue Like Jazz: Nonreligious ...",
209
+ "Price": "25.77",
210
+ "InStock": "True"
211
+ },
212
+ {
213
+ "booksName": "Online Marketing for Busy ...",
214
+ "Price": "46.35",
215
+ "InStock": "True"
216
+ },
217
+ {
218
+ "booksName": "How to Be Miserable: ...",
219
+ "Price": "46.03",
220
+ "InStock": "True"
221
+ },
222
+ {
223
+ "booksName": "Overload: How to Unplug, ...",
224
+ "Price": "52.15",
225
+ "InStock": "True"
226
+ },
227
+ {
228
+ "booksName": "You Are a Badass: ...",
229
+ "Price": "12.08",
230
+ "InStock": "True"
231
+ },
232
+ {
233
+ "booksName": "How to Stop Worrying ...",
234
+ "Price": "46.49",
235
+ "InStock": "True"
236
+ },
237
+ {
238
+ "booksName": "In Her Wake",
239
+ "Price": "12.84",
240
+ "InStock": "True"
241
+ },
242
+ {
243
+ "booksName": "How Music Works",
244
+ "Price": "37.32",
245
+ "InStock": "True"
246
+ },
247
+ {
248
+ "booksName": "Foolproof Preserving: A Guide ...",
249
+ "Price": "30.52",
250
+ "InStock": "True"
251
+ },
252
+ {
253
+ "booksName": "In Her Wake",
254
+ "Price": "12.84",
255
+ "InStock": "True"
256
+ },
257
+ {
258
+ "booksName": "How Music Works",
259
+ "Price": "37.32",
260
+ "InStock": "True"
261
+ },
262
+ {
263
+ "booksName": "Foolproof Preserving: A Guide ...",
264
+ "Price": "30.52",
265
+ "InStock": "True"
266
+ },
267
+ {
268
+ "booksName": "Chase Me (Paris Nights ...",
269
+ "Price": "25.27",
270
+ "InStock": "True"
271
+ },
272
+ {
273
+ "booksName": "Black Dust",
274
+ "Price": "34.53",
275
+ "InStock": "True"
276
+ },
277
+ {
278
+ "booksName": "Birdsong: A Story in ...",
279
+ "Price": "54.64",
280
+ "InStock": "True"
281
+ },
282
+ {
283
+ "booksName": "America's Cradle of Quarterbacks: ...",
284
+ "Price": "22.5",
285
+ "InStock": "True"
286
+ },
287
+ {
288
+ "booksName": "Aladdin and His Wonderful ...",
289
+ "Price": "53.13",
290
+ "InStock": "True"
291
+ },
292
+ {
293
+ "booksName": "Worlds Elsewhere: Journeys Around ...",
294
+ "Price": "40.3",
295
+ "InStock": "True"
296
+ },
297
+ {
298
+ "booksName": "Wall and Piece",
299
+ "Price": "44.18",
300
+ "InStock": "True"
301
+ },
302
+ {
303
+ "booksName": "The Four Agreements: A ...",
304
+ "Price": "17.66",
305
+ "InStock": "True"
306
+ },
307
+ {
308
+ "booksName": "The Five Love Languages: ...",
309
+ "Price": "31.05",
310
+ "InStock": "True"
311
+ },
312
+ {
313
+ "booksName": "The Elephant Tree",
314
+ "Price": "23.82",
315
+ "InStock": "True"
316
+ },
317
+ {
318
+ "booksName": "The Bear and the ...",
319
+ "Price": "36.89",
320
+ "InStock": "True"
321
+ },
322
+ {
323
+ "booksName": "Sophie's World",
324
+ "Price": "15.94",
325
+ "InStock": "True"
326
+ },
327
+ {
328
+ "booksName": "Penny Maybe",
329
+ "Price": "33.29",
330
+ "InStock": "True"
331
+ },
332
+ {
333
+ "booksName": "Maude (1883-1993):She Grew Up ...",
334
+ "Price": "18.02",
335
+ "InStock": "True"
336
+ },
337
+ {
338
+ "booksName": "In a Dark, Dark ...",
339
+ "Price": "19.63",
340
+ "InStock": "True"
341
+ },
342
+ {
343
+ "booksName": "Behind Closed Doors",
344
+ "Price": "52.22",
345
+ "InStock": "True"
346
+ },
347
+ {
348
+ "booksName": "You can't bury them ...",
349
+ "Price": "33.63",
350
+ "InStock": "True"
351
+ },
352
+ {
353
+ "booksName": "Slow States of Collapse: ...",
354
+ "Price": "57.31",
355
+ "InStock": "True"
356
+ },
357
+ {
358
+ "booksName": "Reasons to Stay Alive",
359
+ "Price": "26.41",
360
+ "InStock": "True"
361
+ },
362
+ {
363
+ "booksName": "Private Paris (Private #10)",
364
+ "Price": "47.61",
365
+ "InStock": "True"
366
+ },
367
+ {
368
+ "booksName": "#HigherSelfie: Wake Up Your ...",
369
+ "Price": "23.11",
370
+ "InStock": "True"
371
+ },
372
+ {
373
+ "bookName": "Reasons to Stay Alive",
374
+ "Price": "26.41",
375
+ "InStock": "True"
376
+ },
377
+ {
378
+ "bookName": "Private Paris (Private #10)",
379
+ "Price": "47.61",
380
+ "InStock": "True"
381
+ },
382
+ {
383
+ "bookName": "#HigherSelfie: Wake Up Your ...",
384
+ "Price": "23.11",
385
+ "InStock": "True"
386
+ },
387
+ {
388
+ "bookName": "Without Borders (Wanderlove #1)",
389
+ "Price": "45.07",
390
+ "InStock": "True"
391
+ },
392
+ {
393
+ "bookName": "When We Collided",
394
+ "Price": "31.77",
395
+ "InStock": "True"
396
+ },
397
+ {
398
+ "bookName": "We Love You, Charlie ...",
399
+ "Price": "50.27",
400
+ "InStock": "True"
401
+ },
402
+ {
403
+ "bookName": "Untitled Collection: Sabbath Poems ...",
404
+ "Price": "14.27",
405
+ "InStock": "True"
406
+ },
407
+ {
408
+ "bookName": "Unseen City: The Majesty ...",
409
+ "Price": "44.18",
410
+ "InStock": "True"
411
+ },
412
+ {
413
+ "bookName": "Unicorn Tracks",
414
+ "Price": "18.78",
415
+ "InStock": "True"
416
+ },
417
+ {
418
+ "bookName": "Unbound: How Eight Technologies ...",
419
+ "Price": "25.52",
420
+ "InStock": "True"
421
+ },
422
+ {
423
+ "bookName": "Tsubasa: WoRLD CHRoNiCLE 2 ...",
424
+ "Price": "16.28",
425
+ "InStock": "True"
426
+ },
427
+ {
428
+ "bookName": "Throwing Rocks at the ...",
429
+ "Price": "31.12",
430
+ "InStock": "True"
431
+ },
432
+ {
433
+ "bookName": "This One Summer",
434
+ "Price": "19.49",
435
+ "InStock": "True"
436
+ },
437
+ {
438
+ "bookName": "Thirst",
439
+ "Price": "17.27",
440
+ "InStock": "True"
441
+ },
442
+ {
443
+ "bookName": "The Torch Is Passed: ...",
444
+ "Price": "19.09",
445
+ "InStock": "True"
446
+ },
447
+ {
448
+ "bookName": "The Secret of Dreadwillow ...",
449
+ "Price": "56.13",
450
+ "InStock": "True"
451
+ },
452
+ {
453
+ "bookName": "The Pioneer Woman Cooks: ...",
454
+ "Price": "56.41",
455
+ "InStock": "True"
456
+ },
457
+ {
458
+ "bookName": "The Past Never Ends",
459
+ "Price": "56.5",
460
+ "InStock": "True"
461
+ },
462
+ {
463
+ "bookName": "The Natural History of ...",
464
+ "Price": "45.22",
465
+ "InStock": "True"
466
+ },
467
+ {
468
+ "bookName": "A Light in the ...",
469
+ "Price": "51.77",
470
+ "InStock": "True"
471
+ },
472
+ {
473
+ "bookName": "Tipping the Velvet",
474
+ "Price": "53.74",
475
+ "InStock": "True"
476
+ },
477
+ {
478
+ "bookName": "Soumission",
479
+ "Price": "50.1",
480
+ "InStock": "True"
481
+ },
482
+ {
483
+ "bookName": "Sharp Objects",
484
+ "Price": "47.82",
485
+ "InStock": "True"
486
+ },
487
+ {
488
+ "bookName": "Sapiens: A Brief History ...",
489
+ "Price": "54.23",
490
+ "InStock": "True"
491
+ },
492
+ {
493
+ "bookName": "The Requiem Red",
494
+ "Price": "22.65",
495
+ "InStock": "True"
496
+ },
497
+ {
498
+ "booksName": "Sharp Objects",
499
+ "Price": "47.82",
500
+ "InStock": "True"
501
+ },
502
+ {
503
+ "booksName": "Sapiens: A Brief History ...",
504
+ "Price": "54.23",
505
+ "InStock": "True"
506
+ },
507
+ {
508
+ "booksName": "The Requiem Red",
509
+ "Price": "22.65",
510
+ "InStock": "True"
511
+ },
512
+ {
513
+ "booksName": "The Dirty Little Secrets ...",
514
+ "Price": "33.34",
515
+ "InStock": "True"
516
+ },
517
+ {
518
+ "booksName": "The Coming Woman: A ...",
519
+ "Price": "17.93",
520
+ "InStock": "True"
521
+ },
522
+ {
523
+ "booksName": "The Boys in the ...",
524
+ "Price": "22.6",
525
+ "InStock": "True"
526
+ },
527
+ {
528
+ "booksName": "The Black Maria",
529
+ "Price": "52.15",
530
+ "InStock": "True"
531
+ },
532
+ {
533
+ "booksName": "Starving Hearts (Triangular Trade ...",
534
+ "Price": "13.99",
535
+ "InStock": "True"
536
+ },
537
+ {
538
+ "booksName": "Shakespeare's Sonnets",
539
+ "Price": "20.66",
540
+ "InStock": "True"
541
+ },
542
+ {
543
+ "booksName": "Set Me Free",
544
+ "Price": "17.46",
545
+ "InStock": "True"
546
+ },
547
+ {
548
+ "booksName": "Scott Pilgrim's Precious Little ...",
549
+ "Price": "52.29",
550
+ "InStock": "True"
551
+ },
552
+ {
553
+ "booksName": "Rip it Up and ...",
554
+ "Price": "35.02",
555
+ "InStock": "True"
556
+ },
557
+ {
558
+ "booksName": "Our Band Could Be ...",
559
+ "Price": "57.25",
560
+ "InStock": "True"
561
+ },
562
+ {
563
+ "booksName": "Olio",
564
+ "Price": "23.88",
565
+ "InStock": "True"
566
+ },
567
+ {
568
+ "booksName": "Mesaerion: The Best Science ...",
569
+ "Price": "37.59",
570
+ "InStock": "True"
571
+ },
572
+ {
573
+ "booksName": "Libertarianism for Beginners",
574
+ "Price": "51.33",
575
+ "InStock": "True"
576
+ },
577
+ {
578
+ "booksName": "It's Only the Himalayas",
579
+ "Price": "45.17",
580
+ "InStock": "True"
581
+ },
582
+ {
583
+ "booksName": "The Nameless City (The ...",
584
+ "Price": "38.16",
585
+ "InStock": "True"
586
+ },
587
+ {
588
+ "booksName": "The Murder That Never ...",
589
+ "Price": "54.11",
590
+ "InStock": "True"
591
+ },
592
+ {
593
+ "booksName": "The Most Perfect Thing: ...",
594
+ "Price": "42.96",
595
+ "InStock": "True"
596
+ },
597
+ {
598
+ "booksName": "The Mindfulness and Acceptance ...",
599
+ "Price": "23.89",
600
+ "InStock": "True"
601
+ },
602
+ {
603
+ "booksName": "The Life-Changing Magic of ...",
604
+ "Price": "16.77",
605
+ "InStock": "True"
606
+ },
607
+ {
608
+ "booksName": "The Inefficiency Assassin: Time ...",
609
+ "Price": "20.59",
610
+ "InStock": "True"
611
+ },
612
+ {
613
+ "booksName": "The Gutsy Girl: Escapades ...",
614
+ "Price": "37.0",
615
+ "InStock": "True"
616
+ },
617
+ {
618
+ "booksName": "The Life-Changing Magic of ...",
619
+ "Price": "16.77",
620
+ "InStock": "True"
621
+ },
622
+ {
623
+ "booksName": "The Inefficiency Assassin: Time ...",
624
+ "Price": "20.59",
625
+ "InStock": "True"
626
+ },
627
+ {
628
+ "booksName": "The Gutsy Girl: Escapades ...",
629
+ "Price": "37.13",
630
+ "InStock": "True"
631
+ },
632
+ {
633
+ "booksName": "The Electric Pencil: Drawings ...",
634
+ "Price": "56.06",
635
+ "InStock": "True"
636
+ },
637
+ {
638
+ "booksName": "The Death of Humanity: ...",
639
+ "Price": "58.11",
640
+ "InStock": "True"
641
+ },
642
+ {
643
+ "booksName": "The Bulletproof Diet: Lose ...",
644
+ "Price": "49.05",
645
+ "InStock": "True"
646
+ },
647
+ {
648
+ "booksName": "The Art Forger",
649
+ "Price": "40.76",
650
+ "InStock": "True"
651
+ },
652
+ {
653
+ "booksName": "The Age of Genius: ...",
654
+ "Price": "19.73",
655
+ "InStock": "True"
656
+ },
657
+ {
658
+ "booksName": "The Activist's Tao Te ...",
659
+ "Price": "32.24",
660
+ "InStock": "True"
661
+ },
662
+ {
663
+ "booksName": "Spark Joy: An Illustrated ...",
664
+ "Price": "41.83",
665
+ "InStock": "True"
666
+ },
667
+ {
668
+ "booksName": "Soul Reader",
669
+ "Price": "39.58",
670
+ "InStock": "True"
671
+ },
672
+ {
673
+ "booksName": "Security",
674
+ "Price": "39.25",
675
+ "InStock": "True"
676
+ },
677
+ {
678
+ "booksName": "Saga, Volume 6 (Saga ...",
679
+ "Price": "25.02",
680
+ "InStock": "True"
681
+ },
682
+ {
683
+ "booksName": "Saga, Volume 5 (Saga ...",
684
+ "Price": "51.04",
685
+ "InStock": "True"
686
+ },
687
+ {
688
+ "booksName": "Reskilling America: Learning to ...",
689
+ "Price": "19.83",
690
+ "InStock": "True"
691
+ },
692
+ {
693
+ "booksName": "Rat Queens, Vol. 3: ...",
694
+ "Price": "50.4",
695
+ "InStock": "True"
696
+ },
697
+ {
698
+ "booksName": "Princess Jellyfish 2-in-1 Omnibus, ...",
699
+ "Price": "13.61",
700
+ "InStock": "True"
701
+ },
702
+ {
703
+ "booksName": "Princess Between Worlds (Wide-Awake ...",
704
+ "Price": "13.34",
705
+ "InStock": "True"
706
+ },
707
+ {
708
+ "booksName": "Pop Gun War, Volume ...",
709
+ "Price": "18.97",
710
+ "InStock": "True"
711
+ },
712
+ {
713
+ "booksName": "Political Suicide: Missteps, Peccadilloes, ...",
714
+ "Price": "36.28",
715
+ "InStock": "True"
716
+ },
717
+ {
718
+ "booksName": "Patience",
719
+ "Price": "10.16",
720
+ "InStock": "True"
721
+ },
722
+ {
723
+ "booksName": "Outcast, Vol. 1: A ...",
724
+ "Price": "15.44",
725
+ "InStock": "True"
726
+ },
727
+ {
728
+ "booksName": "orange: The Complete Col",
729
+ "Price": "0.0",
730
+ "InStock": "False"
731
+ },
732
+ {
733
+ "booksName": "Missteps, Peccadilloes, ...",
734
+ "Price": "36.28",
735
+ "InStock": "True"
736
+ },
737
+ {
738
+ "booksName": "Patience",
739
+ "Price": "10.16",
740
+ "InStock": "True"
741
+ },
742
+ {
743
+ "booksName": "Outcast, Vol. 1: A ...",
744
+ "Price": "15.44",
745
+ "InStock": "True"
746
+ },
747
+ {
748
+ "booksName": "orange: The Complete Collection ...",
749
+ "Price": "48.41",
750
+ "InStock": "True"
751
+ },
752
+ {
753
+ "booksName": "Online Marketing for Busy ...",
754
+ "Price": "46.35",
755
+ "InStock": "True"
756
+ },
757
+ {
758
+ "booksName": "On a Midnight Clear",
759
+ "Price": "14.07",
760
+ "InStock": "True"
761
+ },
762
+ {
763
+ "booksName": "Obsidian (Lux #1)",
764
+ "Price": "14.86",
765
+ "InStock": "True"
766
+ },
767
+ {
768
+ "booksName": "My Paris Kitchen: Recipes ...",
769
+ "Price": "33.37",
770
+ "InStock": "True"
771
+ },
772
+ {
773
+ "booksName": "Masks and Shadows",
774
+ "Price": "56.4",
775
+ "InStock": "True"
776
+ },
777
+ {
778
+ "booksName": "Mama Tried: Traditional Italian ...",
779
+ "Price": "14.02",
780
+ "InStock": "True"
781
+ },
782
+ {
783
+ "booksName": "Lumberjanes, Vol. 2: Friendship ...",
784
+ "Price": "46.91",
785
+ "InStock": "True"
786
+ },
787
+ {
788
+ "booksName": "Lumberjanes, Vol. 1: Beware ...",
789
+ "Price": "45.61",
790
+ "InStock": "True"
791
+ },
792
+ {
793
+ "booksName": "Lumberjanes Vol. 3: A ...",
794
+ "Price": "19.92",
795
+ "InStock": "True"
796
+ },
797
+ {
798
+ "booksName": "Layered: Baking, Building, and ...",
799
+ "Price": "40.11",
800
+ "InStock": "True"
801
+ },
802
+ {
803
+ "booksName": "Judo: Seven Steps to ...",
804
+ "Price": "53.9",
805
+ "InStock": "True"
806
+ },
807
+ {
808
+ "booksName": "Join",
809
+ "Price": "35.67",
810
+ "InStock": "True"
811
+ },
812
+ {
813
+ "booksName": "In the Country We ...",
814
+ "Price": "22.0",
815
+ "InStock": "True"
816
+ },
817
+ {
818
+ "booksName": "Immunity: How Elie Metchnikoff ...",
819
+ "Price": "57.36",
820
+ "InStock": "True"
821
+ },
822
+ {
823
+ "booksName": "I Hate Fairyland, Vol. ...",
824
+ "Price": "29.17",
825
+ "InStock": "True"
826
+ },
827
+ {
828
+ "booksName": "I am a Hero ...",
829
+ "Price": "54.63",
830
+ "InStock": "True"
831
+ },
832
+ {
833
+ "booksName": "How to Be Miserable: ...",
834
+ "Price": "46.03",
835
+ "InStock": "True"
836
+ },
837
+ {
838
+ "booksName": "Her Backup Boyfriend (The ...",
839
+ "Price": "33.97",
840
+ "InStock": "True"
841
+ },
842
+ {
843
+ "booksName": "Giant Days, Vol. 2 ...",
844
+ "Price": "22.11",
845
+ "InStock": "True"
846
+ },
847
+ {
848
+ "booksName": "How to Be Miserable: ...",
849
+ "Price": "46.03",
850
+ "InStock": "True"
851
+ },
852
+ {
853
+ "booksName": "Her Backup Boyfriend (The ...",
854
+ "Price": "33.97",
855
+ "InStock": "True"
856
+ },
857
+ {
858
+ "booksName": "Giant Days, Vol. 2 ...",
859
+ "Price": "22.11",
860
+ "InStock": "True"
861
+ },
862
+ {
863
+ "booksName": "Forever and Forever: The ...",
864
+ "Price": "29.69",
865
+ "InStock": "True"
866
+ },
867
+ {
868
+ "booksName": "First and First (Five ...",
869
+ "Price": "15.97",
870
+ "InStock": "True"
871
+ },
872
+ {
873
+ "booksName": "Fifty Shades Darker (Fifty ...",
874
+ "Price": "21.96",
875
+ "InStock": "True"
876
+ },
877
+ {
878
+ "booksName": "Everydata: The Misinformation Hidden ...",
879
+ "Price": "54.35",
880
+ "InStock": "True"
881
+ },
882
+ {
883
+ "booksName": "Don't Be a Jerk: ...",
884
+ "Price": "37.97",
885
+ "InStock": "True"
886
+ },
887
+ {
888
+ "booksName": "Danganronpa Volume 1",
889
+ "Price": "51.99",
890
+ "InStock": "True"
891
+ },
892
+ {
893
+ "booksName": "Crown of Midnight (Throne ...",
894
+ "Price": "43.29",
895
+ "InStock": "True"
896
+ },
897
+ {
898
+ "booksName": "Codename Baboushka, Volume 1: ...",
899
+ "Price": "36.72",
900
+ "InStock": "True"
901
+ },
902
+ {
903
+ "booksName": "Camp Midnight",
904
+ "Price": "17.08",
905
+ "InStock": "True"
906
+ },
907
+ {
908
+ "booksName": "Call the Nurse: True ...",
909
+ "Price": "29.14",
910
+ "InStock": "True"
911
+ },
912
+ {
913
+ "booksName": "Burning",
914
+ "Price": "28.81",
915
+ "InStock": "True"
916
+ },
917
+ {
918
+ "booksName": "Bossypants",
919
+ "Price": "49.46",
920
+ "InStock": "True"
921
+ },
922
+ {
923
+ "booksName": "Bitch Planet, Vol. 1: ...",
924
+ "Price": "37.92",
925
+ "InStock": "True"
926
+ },
927
+ {
928
+ "booksName": "Avatar: The Last Airbender: ...",
929
+ "Price": "28.09",
930
+ "InStock": "True"
931
+ },
932
+ {
933
+ "booksName": "Algorithms to Live By: ...",
934
+ "Price": "30.81",
935
+ "InStock": "True"
936
+ },
937
+ {
938
+ "booksName": "A World of Flavor: ...",
939
+ "Price": "42.95",
940
+ "InStock": "True"
941
+ },
942
+ {
943
+ "booksName": "A Piece of Sky, ...",
944
+ "Price": "56.76",
945
+ "InStock": "True"
946
+ },
947
+ {
948
+ "booksName": "A Murder in Time",
949
+ "Price": "16.64",
950
+ "InStock": "True"
951
+ },
952
+ {
953
+ "booksName": "A Flight of Arrows ...",
954
+ "Price": "55.53",
955
+ "InStock": "True"
956
+ },
957
+ {
958
+ "booksName": "A Fierce and Subtle ...",
959
+ "Price": "28.13",
960
+ "InStock": "True"
961
+ },
962
+ {
963
+ "booksName": "A Court of Thorns ...",
964
+ "Price": "52.37",
965
+ "InStock": "True"
966
+ },
967
+ {
968
+ "booksName": "A Flight of Arrows ...",
969
+ "Price": "55.53",
970
+ "InStock": "T"
971
+ },
972
+ {
973
+ "booksName": "A Fierce and Subtle ...",
974
+ "Price": "28.13",
975
+ "InStock": "T"
976
+ },
977
+ {
978
+ "booksName": "A Court of Thorns ...",
979
+ "Price": "52.37",
980
+ "InStock": "T"
981
+ },
982
+ {
983
+ "booksName": "(Un)Qualified: How God Uses ...",
984
+ "Price": "54.0",
985
+ "InStock": "T"
986
+ },
987
+ {
988
+ "booksName": "You Are What You ...",
989
+ "Price": "21.87",
990
+ "InStock": "T"
991
+ },
992
+ {
993
+ "booksName": "William Shakespeare's Star Wars: ...",
994
+ "Price": "43.3",
995
+ "InStock": "T"
996
+ },
997
+ {
998
+ "booksName": "Tuesday Nights in 1980",
999
+ "Price": "21.04",
1000
+ "InStock": "T"
1001
+ },
1002
+ {
1003
+ "booksName": "Tracing Numbers on a ...",
1004
+ "Price": "41.6",
1005
+ "InStock": "T"
1006
+ },
1007
+ {
1008
+ "booksName": "Throne of Glass (Throne ...",
1009
+ "Price": "35.07",
1010
+ "InStock": "T"
1011
+ },
1012
+ {
1013
+ "booksName": "Thomas Jefferson and the ...",
1014
+ "Price": "59.64",
1015
+ "InStock": "T"
1016
+ },
1017
+ {
1018
+ "booksName": "Thirteen Reasons Why",
1019
+ "Price": "52.72",
1020
+ "InStock": "T"
1021
+ },
1022
+ {
1023
+ "booksName": "The White Cat and ...",
1024
+ "Price": "58.08",
1025
+ "InStock": "T"
1026
+ },
1027
+ {
1028
+ "booksName": "The Wedding Dress",
1029
+ "Price": "24.12",
1030
+ "InStock": "T"
1031
+ },
1032
+ {
1033
+ "booksName": "The Vacationers",
1034
+ "Price": "42.15",
1035
+ "InStock": "T"
1036
+ },
1037
+ {
1038
+ "booksName": "The Third Wave: An ...",
1039
+ "Price": "12.61",
1040
+ "InStock": "T"
1041
+ },
1042
+ {
1043
+ "booksName": "The Stranger",
1044
+ "Price": "17.44",
1045
+ "InStock": "T"
1046
+ },
1047
+ {
1048
+ "booksName": "The Shadow Hero (The ...",
1049
+ "Price": "33.14",
1050
+ "InStock": "T"
1051
+ },
1052
+ {
1053
+ "booksName": "The Secret (The Secret ...",
1054
+ "Price": "27.37",
1055
+ "InStock": "T"
1056
+ },
1057
+ {
1058
+ "booksName": "The Regional Office Is ...",
1059
+ "Price": "51.36",
1060
+ "InStock": "T"
1061
+ },
1062
+ {
1063
+ "booksName": "The Psychopath Test: A ...",
1064
+ "Price": "36.0",
1065
+ "InStock": "T"
1066
+ },
1067
+ {
1068
+ "booksName": "The Project",
1069
+ "Price": "10.65",
1070
+ "InStock": "T"
1071
+ },
1072
+ {
1073
+ "booksName": "The Power of Now: ...",
1074
+ "Price": "43.54",
1075
+ "InStock": "T"
1076
+ },
1077
+ {
1078
+ "booksName": "The Omnivore's Dilemma: A ...",
1079
+ "Price": "38.21",
1080
+ "InStock": "T"
1081
+ },
1082
+ {
1083
+ "booksName": "Suddenly in Love (Lake ...",
1084
+ "Price": "55.99",
1085
+ "InStock": "True"
1086
+ },
1087
+ {
1088
+ "booksName": "Something More Than This",
1089
+ "Price": "16.24",
1090
+ "InStock": "True"
1091
+ },
1092
+ {
1093
+ "booksName": "Soft Apocalypse",
1094
+ "Price": "26.12",
1095
+ "InStock": "True"
1096
+ },
1097
+ {
1098
+ "booksName": "So You've Been Publicly ...",
1099
+ "Price": "12.23",
1100
+ "InStock": "True"
1101
+ },
1102
+ {
1103
+ "booksName": "Shoe Dog: A Memoir ...",
1104
+ "Price": "23.99",
1105
+ "InStock": "True"
1106
+ },
1107
+ {
1108
+ "booksName": "Shobu Samurai, Project Aryoku ...",
1109
+ "Price": "29.06",
1110
+ "InStock": "True"
1111
+ },
1112
+ {
1113
+ "booksName": "Secrets and Lace (Fatal ...",
1114
+ "Price": "20.27",
1115
+ "InStock": "True"
1116
+ },
1117
+ {
1118
+ "booksName": "Scarlett Epstein Hates It ...",
1119
+ "Price": "43.55",
1120
+ "InStock": "True"
1121
+ },
1122
+ {
1123
+ "booksName": "Romero and Juliet: A ...",
1124
+ "Price": "36.94",
1125
+ "InStock": "True"
1126
+ },
1127
+ {
1128
+ "booksName": "Redeeming Love",
1129
+ "Price": "20.47",
1130
+ "InStock": "True"
1131
+ },
1132
+ {
1133
+ "booksName": "Poses for Artists Volume ...",
1134
+ "Price": "41.06",
1135
+ "InStock": "True"
1136
+ },
1137
+ {
1138
+ "booksName": "Poems That Make Grown ...",
1139
+ "Price": "14.19",
1140
+ "InStock": "True"
1141
+ },
1142
+ {
1143
+ "booksName": "Nightingale, Sing",
1144
+ "Price": "38.28",
1145
+ "InStock": "True"
1146
+ },
1147
+ {
1148
+ "booksName": "Nightingale, Sky with Exit ...",
1149
+ "Price": "41.05",
1150
+ "InStock": "True"
1151
+ },
1152
+ {
1153
+ "booksName": "Mrs. Houdini",
1154
+ "Price": "30.25",
1155
+ "InStock": "True"
1156
+ },
1157
+ {
1158
+ "booksName": "Modern Romance",
1159
+ "Price": "28.26",
1160
+ "InStock": "True"
1161
+ },
1162
+ {
1163
+ "booksName": "Miss Peregrines Home for ...",
1164
+ "Price": "10.76",
1165
+ "InStock": "True"
1166
+ },
1167
+ {
1168
+ "booksName": "Louisa: The Extraordinary Life ...",
1169
+ "Price": "16.85",
1170
+ "InStock": "True"
1171
+ },
1172
+ {
1173
+ "booksName": "Little Red",
1174
+ "Price": "13.47",
1175
+ "InStock": "True"
1176
+ },
1177
+ {
1178
+ "booksName": "Library of Souls (Miss ...",
1179
+ "Price": "48.56",
1180
+ "InStock": "True"
1181
+ },
1182
+ {
1183
+ "booksName": "Large Print Heart of ...",
1184
+ "Price": "19.15",
1185
+ "InStock": "True"
1186
+ },
1187
+ {
1188
+ "booksName": "I Had a Nice ...",
1189
+ "Price": "57.36",
1190
+ "InStock": "True"
1191
+ },
1192
+ {
1193
+ "booksName": "Hollow City (Miss Peregrines ...",
1194
+ "Price": "42.98",
1195
+ "InStock": "True"
1196
+ },
1197
+ {
1198
+ "booksName": "Grumbles",
1199
+ "Price": "22.16",
1200
+ "InStock": "True"
1201
+ },
1202
+ {
1203
+ "booksName": "Large Print Heart of ...",
1204
+ "Price": "19.15",
1205
+ "InStock": "True"
1206
+ },
1207
+ {
1208
+ "booksName": "I Had a Nice ...",
1209
+ "Price": "57.36",
1210
+ "InStock": "True"
1211
+ },
1212
+ {
1213
+ "booksName": "Hollow City (Miss Peregrines ...",
1214
+ "Price": "42.98",
1215
+ "InStock": "True"
1216
+ },
1217
+ {
1218
+ "booksName": "Grumbles",
1219
+ "Price": "22.16",
1220
+ "InStock": "True"
1221
+ },
1222
+ {
1223
+ "booksName": "Full Moon over Noahs ...",
1224
+ "Price": "49.43",
1225
+ "InStock": "True"
1226
+ },
1227
+ {
1228
+ "booksName": "Frostbite (Vampire Academy #2)",
1229
+ "Price": "29.99",
1230
+ "InStock": "True"
1231
+ },
1232
+ {
1233
+ "booksName": "Follow You Home",
1234
+ "Price": "21.36",
1235
+ "InStock": "True"
1236
+ },
1237
+ {
1238
+ "booksName": "First Steps for New ...",
1239
+ "Price": "None",
1240
+ "InStock": "False"
1241
+ }
1242
+ ]
output.txt ADDED
@@ -0,0 +1,2595 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1. __________
2
+
3
+ ### A Light in the ...
4
+
5
+ 51.77
6
+
7
+ __In stock
8
+
9
+ Add to basket
10
+
11
+ 2. __________
12
+
13
+ ### Tipping the Velvet
14
+
15
+ 53.74
16
+
17
+ __In stock
18
+
19
+ Add to basket
20
+
21
+ 3. __________
22
+
23
+ ### Soumission
24
+
25
+ 50.10
26
+
27
+ __In stock
28
+
29
+ Add to basket
30
+
31
+ 4. __________
32
+
33
+ ### Sharp Objects
34
+
35
+ 47.82
36
+
37
+ __In stock
38
+
39
+ Add to basket
40
+
41
+ 5. __________
42
+
43
+ ### Sapiens: A Brief History ...
44
+
45
+ 54.23
46
+
47
+ __In stock
48
+
49
+ Add to basket
50
+
51
+ 6. __________
52
+
53
+ ### The Requiem Red
54
+
55
+ 22.65
56
+
57
+ __In stock
58
+
59
+ Add to basket
60
+
61
+ 7. __________
62
+
63
+ ### The Dirty Little Secrets ...
64
+
65
+ 33.34
66
+
67
+ __In stock
68
+
69
+ Add to basket
70
+
71
+ 8. __________
72
+
73
+ ### The Coming Woman: A ...
74
+
75
+ 17.93
76
+
77
+ __In stock
78
+
79
+ Add to basket
80
+
81
+ 9. __________
82
+
83
+ ### The Boys in the ...
84
+
85
+ 22.60
86
+
87
+ __In stock
88
+
89
+ Add to basket
90
+
91
+ 10. __________
92
+
93
+ ### The Black Maria
94
+
95
+ 52.15
96
+
97
+ __In stock
98
+
99
+ Add to basket
100
+
101
+ 11. __________
102
+
103
+ ### Starving Hearts (Triangular Trade ...
104
+
105
+ 13.99
106
+
107
+ __In stock
108
+
109
+ Add to basket
110
+
111
+ 12. __________
112
+
113
+ ### Shakespeare's Sonnets
114
+
115
+ 20.66
116
+
117
+ __In stock
118
+
119
+ Add to basket
120
+
121
+ 13. __________
122
+
123
+ ### Set Me Free
124
+
125
+ 17.46
126
+
127
+ __In stock
128
+
129
+ Add to basket
130
+
131
+ 14. __________
132
+
133
+ ### Scott Pilgrim's Precious Little ...
134
+
135
+ 52.29
136
+
137
+ __In stock
138
+
139
+ Add to basket
140
+
141
+ 15. __________
142
+
143
+ ### Rip it Up and ...
144
+
145
+ 35.02
146
+
147
+ __In stock
148
+
149
+ Add to basket
150
+
151
+ 16. __________
152
+
153
+ ### Our Band Could Be ...
154
+
155
+ 57.25
156
+
157
+ __In stock
158
+
159
+ Add to basket
160
+
161
+ 17. __________
162
+
163
+ ### Olio
164
+
165
+ 23.88
166
+
167
+ __In stock
168
+
169
+ Add to basket
170
+
171
+ 18. __________
172
+
173
+ ### Mesaerion: The Best Science ...
174
+
175
+ 37.59
176
+
177
+ __In stock
178
+
179
+ Add to basket
180
+
181
+ 19. __________
182
+
183
+ ### Libertarianism for Beginners
184
+
185
+ 51.33
186
+
187
+ __In stock
188
+
189
+ Add to basket
190
+
191
+ 20. __________
192
+
193
+ ### It's Only the Himalayas
194
+
195
+ 45.17
196
+
197
+ __In stock
198
+
199
+ Add to basket
200
+
201
+ * Page 1 of 50
202
+ * next
203
+ None
204
+ 1. __________
205
+
206
+ ### The Bulletproof Diet: Lose ...
207
+
208
+ 49.05
209
+
210
+ __In stock
211
+
212
+ Add to basket
213
+
214
+ 2. __________
215
+
216
+ ### Eat Fat, Get Thin
217
+
218
+ 54.07
219
+
220
+ __In stock
221
+
222
+ Add to basket
223
+
224
+ 3. __________
225
+
226
+ ### 10-Day Green Smoothie Cleanse: ...
227
+
228
+ 49.71
229
+
230
+ __In stock
231
+
232
+ Add to basket
233
+
234
+ 4. __________
235
+
236
+ ### The Art and Science ...
237
+
238
+ 52.98
239
+
240
+ __In stock
241
+
242
+ Add to basket
243
+ 1. __________
244
+
245
+ ### Suzie Snowflake: One beautiful ...
246
+
247
+ 54.81
248
+
249
+ __In stock
250
+
251
+ Add to basket
252
+ 1. __________
253
+
254
+ ### Libertarianism for Beginners
255
+
256
+ 51.33
257
+
258
+ __In stock
259
+
260
+ Add to basket
261
+
262
+ 2. __________
263
+
264
+ ### Why the Right Went ...
265
+
266
+ 52.65
267
+
268
+ __In stock
269
+
270
+ Add to basket
271
+
272
+ 3. __________
273
+
274
+ ### Equal Is Unfair: America's ...
275
+
276
+ 56.86
277
+
278
+ __In stock
279
+
280
+ Add to basket
281
+ None
282
+ 1. __________
283
+
284
+ ### Dark Notes
285
+
286
+ 19.19
287
+
288
+ __In stock
289
+
290
+ Add to basket
291
+ None
292
+ None
293
+ 1. __________
294
+
295
+ ### Amid the Chaos
296
+
297
+ 36.58
298
+
299
+ __In stock
300
+
301
+ Add to basket
302
+ 1. __________
303
+
304
+ ### The Grownup
305
+
306
+ 35.88
307
+
308
+ __In stock
309
+
310
+ Add to basket
311
+ 1. __________
312
+
313
+ ### The Long Shadow of ...
314
+
315
+ 10.97
316
+
317
+ __In stock
318
+
319
+ Add to basket
320
+ 1. __________
321
+
322
+ ### Silence in the Dark ...
323
+
324
+ 58.33
325
+
326
+ __In stock
327
+
328
+ Add to basket
329
+ 1. __________
330
+
331
+ ### All the Light We ...
332
+
333
+ 29.87
334
+
335
+ __In stock
336
+
337
+ Add to basket
338
+
339
+ 2. __________
340
+
341
+ ### The Girl You Left ...
342
+
343
+ 15.79
344
+
345
+ __In stock
346
+
347
+ Add to basket
348
+ 1. __________
349
+
350
+ ### Logan Kade (Fallen Crest ...
351
+
352
+ 13.12
353
+
354
+ __In stock
355
+
356
+ Add to basket
357
+ None
358
+ None
359
+ 1. __________
360
+
361
+ ### (Un)Qualified: How God Uses ...
362
+
363
+ 54.00
364
+
365
+ __In stock
366
+
367
+ Add to basket
368
+
369
+ 2. __________
370
+
371
+ ### Crazy Love: Overwhelmed by ...
372
+
373
+ 47.72
374
+
375
+ __In stock
376
+
377
+ Add to basket
378
+
379
+ 3. __________
380
+
381
+ ### Blue Like Jazz: Nonreligious ...
382
+
383
+ 25.77
384
+
385
+ __In stock
386
+
387
+ Add to basket
388
+ None
389
+ None
390
+ 1. __________
391
+
392
+ ### Online Marketing for Busy ...
393
+
394
+ 46.35
395
+
396
+ __In stock
397
+
398
+ Add to basket
399
+
400
+ 2. __________
401
+
402
+ ### How to Be Miserable: ...
403
+
404
+ 46.03
405
+
406
+ __In stock
407
+
408
+ Add to basket
409
+
410
+ 3. __________
411
+
412
+ ### Overload: How to Unplug, ...
413
+
414
+ 52.15
415
+
416
+ __In stock
417
+
418
+ Add to basket
419
+
420
+ 4. __________
421
+
422
+ ### You Are a Badass: ...
423
+
424
+ 12.08
425
+
426
+ __In stock
427
+
428
+ Add to basket
429
+
430
+ 5. __________
431
+
432
+ ### How to Stop Worrying ...
433
+
434
+ 46.49
435
+
436
+ __In stock
437
+
438
+ Add to basket
439
+ None
440
+ None
441
+ None
442
+ None
443
+ None
444
+ None
445
+ None
446
+ None
447
+ None
448
+ None
449
+ None
450
+ None
451
+ None
452
+ None
453
+ None
454
+ None
455
+ 1. __________
456
+
457
+ ### In Her Wake
458
+
459
+ 12.84
460
+
461
+ __In stock
462
+
463
+ Add to basket
464
+
465
+ 2. __________
466
+
467
+ ### How Music Works
468
+
469
+ 37.32
470
+
471
+ __In stock
472
+
473
+ Add to basket
474
+
475
+ 3. __________
476
+
477
+ ### Foolproof Preserving: A Guide ...
478
+
479
+ 30.52
480
+
481
+ __In stock
482
+
483
+ Add to basket
484
+
485
+ 4. __________
486
+
487
+ ### Chase Me (Paris Nights ...
488
+
489
+ 25.27
490
+
491
+ __In stock
492
+
493
+ Add to basket
494
+
495
+ 5. __________
496
+
497
+ ### Black Dust
498
+
499
+ 34.53
500
+
501
+ __In stock
502
+
503
+ Add to basket
504
+
505
+ 6. __________
506
+
507
+ ### Birdsong: A Story in ...
508
+
509
+ 54.64
510
+
511
+ __In stock
512
+
513
+ Add to basket
514
+
515
+ 7. __________
516
+
517
+ ### America's Cradle of Quarterbacks: ...
518
+
519
+ 22.50
520
+
521
+ __In stock
522
+
523
+ Add to basket
524
+
525
+ 8. __________
526
+
527
+ ### Aladdin and His Wonderful ...
528
+
529
+ 53.13
530
+
531
+ __In stock
532
+
533
+ Add to basket
534
+
535
+ 9. __________
536
+
537
+ ### Worlds Elsewhere: Journeys Around ...
538
+
539
+ 40.30
540
+
541
+ __In stock
542
+
543
+ Add to basket
544
+
545
+ 10. __________
546
+
547
+ ### Wall and Piece
548
+
549
+ 44.18
550
+
551
+ __In stock
552
+
553
+ Add to basket
554
+
555
+ 11. __________
556
+
557
+ ### The Four Agreements: A ...
558
+
559
+ 17.66
560
+
561
+ __In stock
562
+
563
+ Add to basket
564
+
565
+ 12. __________
566
+
567
+ ### The Five Love Languages: ...
568
+
569
+ 31.05
570
+
571
+ __In stock
572
+
573
+ Add to basket
574
+
575
+ 13. __________
576
+
577
+ ### The Elephant Tree
578
+
579
+ 23.82
580
+
581
+ __In stock
582
+
583
+ Add to basket
584
+
585
+ 14. __________
586
+
587
+ ### The Bear and the ...
588
+
589
+ 36.89
590
+
591
+ __In stock
592
+
593
+ Add to basket
594
+
595
+ 15. __________
596
+
597
+ ### Sophie's World
598
+
599
+ 15.94
600
+
601
+ __In stock
602
+
603
+ Add to basket
604
+
605
+ 16. __________
606
+
607
+ ### Penny Maybe
608
+
609
+ 33.29
610
+
611
+ __In stock
612
+
613
+ Add to basket
614
+
615
+ 17. __________
616
+
617
+ ### Maude (1883-1993):She Grew Up ...
618
+
619
+ 18.02
620
+
621
+ __In stock
622
+
623
+ Add to basket
624
+
625
+ 18. __________
626
+
627
+ ### In a Dark, Dark ...
628
+
629
+ 19.63
630
+
631
+ __In stock
632
+
633
+ Add to basket
634
+
635
+ 19. __________
636
+
637
+ ### Behind Closed Doors
638
+
639
+ 52.22
640
+
641
+ __In stock
642
+
643
+ Add to basket
644
+
645
+ 20. __________
646
+
647
+ ### You can't bury them ...
648
+
649
+ 33.63
650
+
651
+ __In stock
652
+
653
+ Add to basket
654
+
655
+ * previous
656
+ * Page 2 of 50
657
+ * next
658
+ None
659
+ None
660
+ None
661
+ None
662
+ None
663
+ None
664
+ None
665
+ None
666
+ None
667
+ None
668
+ None
669
+ None
670
+ None
671
+ None
672
+ None
673
+ None
674
+ None
675
+ None
676
+ None
677
+ None
678
+ None
679
+ None
680
+ None
681
+ 1. __________
682
+
683
+ ### Slow States of Collapse: ...
684
+
685
+ 57.31
686
+
687
+ __In stock
688
+
689
+ Add to basket
690
+
691
+ 2. __________
692
+
693
+ ### Reasons to Stay Alive
694
+
695
+ 26.41
696
+
697
+ __In stock
698
+
699
+ Add to basket
700
+
701
+ 3. __________
702
+
703
+ ### Private Paris (Private #10)
704
+
705
+ 47.61
706
+
707
+ __In stock
708
+
709
+ Add to basket
710
+
711
+ 4. __________
712
+
713
+ ### #HigherSelfie: Wake Up Your ...
714
+
715
+ 23.11
716
+
717
+ __In stock
718
+
719
+ Add to basket
720
+
721
+ 5. __________
722
+
723
+ ### Without Borders (Wanderlove #1)
724
+
725
+ 45.07
726
+
727
+ __In stock
728
+
729
+ Add to basket
730
+
731
+ 6. __________
732
+
733
+ ### When We Collided
734
+
735
+ 31.77
736
+
737
+ __In stock
738
+
739
+ Add to basket
740
+
741
+ 7. __________
742
+
743
+ ### We Love You, Charlie ...
744
+
745
+ 50.27
746
+
747
+ __In stock
748
+
749
+ Add to basket
750
+
751
+ 8. __________
752
+
753
+ ### Untitled Collection: Sabbath Poems ...
754
+
755
+ 14.27
756
+
757
+ __In stock
758
+
759
+ Add to basket
760
+
761
+ 9. __________
762
+
763
+ ### Unseen City: The Majesty ...
764
+
765
+ 44.18
766
+
767
+ __In stock
768
+
769
+ Add to basket
770
+
771
+ 10. __________
772
+
773
+ ### Unicorn Tracks
774
+
775
+ 18.78
776
+
777
+ __In stock
778
+
779
+ Add to basket
780
+
781
+ 11. __________
782
+
783
+ ### Unbound: How Eight Technologies ...
784
+
785
+ 25.52
786
+
787
+ __In stock
788
+
789
+ Add to basket
790
+
791
+ 12. __________
792
+
793
+ ### Tsubasa: WoRLD CHRoNiCLE 2 ...
794
+
795
+ 16.28
796
+
797
+ __In stock
798
+
799
+ Add to basket
800
+
801
+ 13. __________
802
+
803
+ ### Throwing Rocks at the ...
804
+
805
+ 31.12
806
+
807
+ __In stock
808
+
809
+ Add to basket
810
+
811
+ 14. __________
812
+
813
+ ### This One Summer
814
+
815
+ 19.49
816
+
817
+ __In stock
818
+
819
+ Add to basket
820
+
821
+ 15. __________
822
+
823
+ ### Thirst
824
+
825
+ 17.27
826
+
827
+ __In stock
828
+
829
+ Add to basket
830
+
831
+ 16. __________
832
+
833
+ ### The Torch Is Passed: ...
834
+
835
+ 19.09
836
+
837
+ __In stock
838
+
839
+ Add to basket
840
+
841
+ 17. __________
842
+
843
+ ### The Secret of Dreadwillow ...
844
+
845
+ 56.13
846
+
847
+ __In stock
848
+
849
+ Add to basket
850
+
851
+ 18. __________
852
+
853
+ ### The Pioneer Woman Cooks: ...
854
+
855
+ 56.41
856
+
857
+ __In stock
858
+
859
+ Add to basket
860
+
861
+ 19. __________
862
+
863
+ ### The Past Never Ends
864
+
865
+ 56.50
866
+
867
+ __In stock
868
+
869
+ Add to basket
870
+
871
+ 20. __________
872
+
873
+ ### The Natural History of ...
874
+
875
+ 45.22
876
+
877
+ __In stock
878
+
879
+ Add to basket
880
+
881
+ * previous
882
+ * Page 3 of 50
883
+ * next
884
+ None
885
+ None
886
+ 1. __________
887
+
888
+ ### A Light in the ...
889
+
890
+ 51.77
891
+
892
+ __In stock
893
+
894
+ Add to basket
895
+
896
+ 2. __________
897
+
898
+ ### Tipping the Velvet
899
+
900
+ 53.74
901
+
902
+ __In stock
903
+
904
+ Add to basket
905
+
906
+ 3. __________
907
+
908
+ ### Soumission
909
+
910
+ 50.10
911
+
912
+ __In stock
913
+
914
+ Add to basket
915
+
916
+ 4. __________
917
+
918
+ ### Sharp Objects
919
+
920
+ 47.82
921
+
922
+ __In stock
923
+
924
+ Add to basket
925
+
926
+ 5. __________
927
+
928
+ ### Sapiens: A Brief History ...
929
+
930
+ 54.23
931
+
932
+ __In stock
933
+
934
+ Add to basket
935
+
936
+ 6. __________
937
+
938
+ ### The Requiem Red
939
+
940
+ 22.65
941
+
942
+ __In stock
943
+
944
+ Add to basket
945
+
946
+ 7. __________
947
+
948
+ ### The Dirty Little Secrets ...
949
+
950
+ 33.34
951
+
952
+ __In stock
953
+
954
+ Add to basket
955
+
956
+ 8. __________
957
+
958
+ ### The Coming Woman: A ...
959
+
960
+ 17.93
961
+
962
+ __In stock
963
+
964
+ Add to basket
965
+
966
+ 9. __________
967
+
968
+ ### The Boys in the ...
969
+
970
+ 22.60
971
+
972
+ __In stock
973
+
974
+ Add to basket
975
+
976
+ 10. __________
977
+
978
+ ### The Black Maria
979
+
980
+ 52.15
981
+
982
+ __In stock
983
+
984
+ Add to basket
985
+
986
+ 11. __________
987
+
988
+ ### Starving Hearts (Triangular Trade ...
989
+
990
+ 13.99
991
+
992
+ __In stock
993
+
994
+ Add to basket
995
+
996
+ 12. __________
997
+
998
+ ### Shakespeare's Sonnets
999
+
1000
+ 20.66
1001
+
1002
+ __In stock
1003
+
1004
+ Add to basket
1005
+
1006
+ 13. __________
1007
+
1008
+ ### Set Me Free
1009
+
1010
+ 17.46
1011
+
1012
+ __In stock
1013
+
1014
+ Add to basket
1015
+
1016
+ 14. __________
1017
+
1018
+ ### Scott Pilgrim's Precious Little ...
1019
+
1020
+ 52.29
1021
+
1022
+ __In stock
1023
+
1024
+ Add to basket
1025
+
1026
+ 15. __________
1027
+
1028
+ ### Rip it Up and ...
1029
+
1030
+ 35.02
1031
+
1032
+ __In stock
1033
+
1034
+ Add to basket
1035
+
1036
+ 16. __________
1037
+
1038
+ ### Our Band Could Be ...
1039
+
1040
+ 57.25
1041
+
1042
+ __In stock
1043
+
1044
+ Add to basket
1045
+
1046
+ 17. __________
1047
+
1048
+ ### Olio
1049
+
1050
+ 23.88
1051
+
1052
+ __In stock
1053
+
1054
+ Add to basket
1055
+
1056
+ 18. __________
1057
+
1058
+ ### Mesaerion: The Best Science ...
1059
+
1060
+ 37.59
1061
+
1062
+ __In stock
1063
+
1064
+ Add to basket
1065
+
1066
+ 19. __________
1067
+
1068
+ ### Libertarianism for Beginners
1069
+
1070
+ 51.33
1071
+
1072
+ __In stock
1073
+
1074
+ Add to basket
1075
+
1076
+ 20. __________
1077
+
1078
+ ### It's Only the Himalayas
1079
+
1080
+ 45.17
1081
+
1082
+ __In stock
1083
+
1084
+ Add to basket
1085
+
1086
+ * Page 1 of 50
1087
+ * next
1088
+ None
1089
+ None
1090
+ None
1091
+ None
1092
+ None
1093
+ None
1094
+ None
1095
+ None
1096
+ None
1097
+ None
1098
+ None
1099
+ None
1100
+ None
1101
+ None
1102
+ None
1103
+ None
1104
+ None
1105
+ 1. __________
1106
+
1107
+ ### The Nameless City (The ...
1108
+
1109
+ 38.16
1110
+
1111
+ __In stock
1112
+
1113
+ Add to basket
1114
+
1115
+ 2. __________
1116
+
1117
+ ### The Murder That Never ...
1118
+
1119
+ 54.11
1120
+
1121
+ __In stock
1122
+
1123
+ Add to basket
1124
+
1125
+ 3. __________
1126
+
1127
+ ### The Most Perfect Thing: ...
1128
+
1129
+ 42.96
1130
+
1131
+ __In stock
1132
+
1133
+ Add to basket
1134
+
1135
+ 4. __________
1136
+
1137
+ ### The Mindfulness and Acceptance ...
1138
+
1139
+ 23.89
1140
+
1141
+ __In stock
1142
+
1143
+ Add to basket
1144
+
1145
+ 5. __________
1146
+
1147
+ ### The Life-Changing Magic of ...
1148
+
1149
+ 16.77
1150
+
1151
+ __In stock
1152
+
1153
+ Add to basket
1154
+
1155
+ 6. __________
1156
+
1157
+ ### The Inefficiency Assassin: Time ...
1158
+
1159
+ 20.59
1160
+
1161
+ __In stock
1162
+
1163
+ Add to basket
1164
+
1165
+ 7. __________
1166
+
1167
+ ### The Gutsy Girl: Escapades ...
1168
+
1169
+ 37.13
1170
+
1171
+ __In stock
1172
+
1173
+ Add to basket
1174
+
1175
+ 8. __________
1176
+
1177
+ ### The Electric Pencil: Drawings ...
1178
+
1179
+ 56.06
1180
+
1181
+ __In stock
1182
+
1183
+ Add to basket
1184
+
1185
+ 9. __________
1186
+
1187
+ ### The Death of Humanity: ...
1188
+
1189
+ 58.11
1190
+
1191
+ __In stock
1192
+
1193
+ Add to basket
1194
+
1195
+ 10. __________
1196
+
1197
+ ### The Bulletproof Diet: Lose ...
1198
+
1199
+ 49.05
1200
+
1201
+ __In stock
1202
+
1203
+ Add to basket
1204
+
1205
+ 11. __________
1206
+
1207
+ ### The Art Forger
1208
+
1209
+ 40.76
1210
+
1211
+ __In stock
1212
+
1213
+ Add to basket
1214
+
1215
+ 12. __________
1216
+
1217
+ ### The Age of Genius: ...
1218
+
1219
+ 19.73
1220
+
1221
+ __In stock
1222
+
1223
+ Add to basket
1224
+
1225
+ 13. __________
1226
+
1227
+ ### The Activist's Tao Te ...
1228
+
1229
+ 32.24
1230
+
1231
+ __In stock
1232
+
1233
+ Add to basket
1234
+
1235
+ 14. __________
1236
+
1237
+ ### Spark Joy: An Illustrated ...
1238
+
1239
+ 41.83
1240
+
1241
+ __In stock
1242
+
1243
+ Add to basket
1244
+
1245
+ 15. __________
1246
+
1247
+ ### Soul Reader
1248
+
1249
+ 39.58
1250
+
1251
+ __In stock
1252
+
1253
+ Add to basket
1254
+
1255
+ 16. __________
1256
+
1257
+ ### Security
1258
+
1259
+ 39.25
1260
+
1261
+ __In stock
1262
+
1263
+ Add to basket
1264
+
1265
+ 17. __________
1266
+
1267
+ ### Saga, Volume 6 (Saga ...
1268
+
1269
+ 25.02
1270
+
1271
+ __In stock
1272
+
1273
+ Add to basket
1274
+
1275
+ 18. __________
1276
+
1277
+ ### Saga, Volume 5 (Saga ...
1278
+
1279
+ 51.04
1280
+
1281
+ __In stock
1282
+
1283
+ Add to basket
1284
+
1285
+ 19. __________
1286
+
1287
+ ### Reskilling America: Learning to ...
1288
+
1289
+ 19.83
1290
+
1291
+ __In stock
1292
+
1293
+ Add to basket
1294
+
1295
+ 20. __________
1296
+
1297
+ ### Rat Queens, Vol. 3: ...
1298
+
1299
+ 50.40
1300
+
1301
+ __In stock
1302
+
1303
+ Add to basket
1304
+
1305
+ * previous
1306
+ * Page 4 of 50
1307
+ * next
1308
+ None
1309
+ None
1310
+ None
1311
+ None
1312
+ None
1313
+ None
1314
+ None
1315
+ None
1316
+ None
1317
+ None
1318
+ None
1319
+ None
1320
+ None
1321
+ None
1322
+ None
1323
+ None
1324
+ None
1325
+ None
1326
+ None
1327
+ None
1328
+ None
1329
+ None
1330
+ None
1331
+ None
1332
+ None
1333
+ 1. __________
1334
+
1335
+ ### Princess Jellyfish 2-in-1 Omnibus, ...
1336
+
1337
+ 13.61
1338
+
1339
+ __In stock
1340
+
1341
+ Add to basket
1342
+
1343
+ 2. __________
1344
+
1345
+ ### Princess Between Worlds (Wide-Awake ...
1346
+
1347
+ 13.34
1348
+
1349
+ __In stock
1350
+
1351
+ Add to basket
1352
+
1353
+ 3. __________
1354
+
1355
+ ### Pop Gun War, Volume ...
1356
+
1357
+ 18.97
1358
+
1359
+ __In stock
1360
+
1361
+ Add to basket
1362
+
1363
+ 4. __________
1364
+
1365
+ ### Political Suicide: Missteps, Peccadilloes, ...
1366
+
1367
+ 36.28
1368
+
1369
+ __In stock
1370
+
1371
+ Add to basket
1372
+
1373
+ 5. __________
1374
+
1375
+ ### Patience
1376
+
1377
+ 10.16
1378
+
1379
+ __In stock
1380
+
1381
+ Add to basket
1382
+
1383
+ 6. __________
1384
+
1385
+ ### Outcast, Vol. 1: A ...
1386
+
1387
+ 15.44
1388
+
1389
+ __In stock
1390
+
1391
+ Add to basket
1392
+
1393
+ 7. __________
1394
+
1395
+ ### orange: The Complete Collection ...
1396
+
1397
+ 48.41
1398
+
1399
+ __In stock
1400
+
1401
+ Add to basket
1402
+
1403
+ 8. __________
1404
+
1405
+ ### Online Marketing for Busy ...
1406
+
1407
+ 46.35
1408
+
1409
+ __In stock
1410
+
1411
+ Add to basket
1412
+
1413
+ 9. __________
1414
+
1415
+ ### On a Midnight Clear
1416
+
1417
+ 14.07
1418
+
1419
+ __In stock
1420
+
1421
+ Add to basket
1422
+
1423
+ 10. __________
1424
+
1425
+ ### Obsidian (Lux #1)
1426
+
1427
+ 14.86
1428
+
1429
+ __In stock
1430
+
1431
+ Add to basket
1432
+
1433
+ 11. __________
1434
+
1435
+ ### My Paris Kitchen: Recipes ...
1436
+
1437
+ 33.37
1438
+
1439
+ __In stock
1440
+
1441
+ Add to basket
1442
+
1443
+ 12. __________
1444
+
1445
+ ### Masks and Shadows
1446
+
1447
+ 56.40
1448
+
1449
+ __In stock
1450
+
1451
+ Add to basket
1452
+
1453
+ 13. __________
1454
+
1455
+ ### Mama Tried: Traditional Italian ...
1456
+
1457
+ 14.02
1458
+
1459
+ __In stock
1460
+
1461
+ Add to basket
1462
+
1463
+ 14. __________
1464
+
1465
+ ### Lumberjanes, Vol. 2: Friendship ...
1466
+
1467
+ 46.91
1468
+
1469
+ __In stock
1470
+
1471
+ Add to basket
1472
+
1473
+ 15. __________
1474
+
1475
+ ### Lumberjanes, Vol. 1: Beware ...
1476
+
1477
+ 45.61
1478
+
1479
+ __In stock
1480
+
1481
+ Add to basket
1482
+
1483
+ 16. __________
1484
+
1485
+ ### Lumberjanes Vol. 3: A ...
1486
+
1487
+ 19.92
1488
+
1489
+ __In stock
1490
+
1491
+ Add to basket
1492
+
1493
+ 17. __________
1494
+
1495
+ ### Layered: Baking, Building, and ...
1496
+
1497
+ 40.11
1498
+
1499
+ __In stock
1500
+
1501
+ Add to basket
1502
+
1503
+ 18. __________
1504
+
1505
+ ### Judo: Seven Steps to ...
1506
+
1507
+ 53.90
1508
+
1509
+ __In stock
1510
+
1511
+ Add to basket
1512
+
1513
+ 19. __________
1514
+
1515
+ ### Join
1516
+
1517
+ 35.67
1518
+
1519
+ __In stock
1520
+
1521
+ Add to basket
1522
+
1523
+ 20. __________
1524
+
1525
+ ### In the Country We ...
1526
+
1527
+ 22.00
1528
+
1529
+ __In stock
1530
+
1531
+ Add to basket
1532
+
1533
+ * previous
1534
+ * Page 5 of 50
1535
+ * next
1536
+ None
1537
+ None
1538
+ None
1539
+ None
1540
+ None
1541
+ None
1542
+ None
1543
+ None
1544
+ None
1545
+ None
1546
+ None
1547
+ None
1548
+ None
1549
+ None
1550
+ None
1551
+ None
1552
+ None
1553
+ None
1554
+ None
1555
+ None
1556
+ None
1557
+ None
1558
+ None
1559
+ None
1560
+ None
1561
+ None
1562
+ None
1563
+ None
1564
+ 1. __________
1565
+
1566
+ ### Immunity: How Elie Metchnikoff ...
1567
+
1568
+ 57.36
1569
+
1570
+ __In stock
1571
+
1572
+ Add to basket
1573
+
1574
+ 2. __________
1575
+
1576
+ ### I Hate Fairyland, Vol. ...
1577
+
1578
+ 29.17
1579
+
1580
+ __In stock
1581
+
1582
+ Add to basket
1583
+
1584
+ 3. __________
1585
+
1586
+ ### I am a Hero ...
1587
+
1588
+ 54.63
1589
+
1590
+ __In stock
1591
+
1592
+ Add to basket
1593
+
1594
+ 4. __________
1595
+
1596
+ ### How to Be Miserable: ...
1597
+
1598
+ 46.03
1599
+
1600
+ __In stock
1601
+
1602
+ Add to basket
1603
+
1604
+ 5. __________
1605
+
1606
+ ### Her Backup Boyfriend (The ...
1607
+
1608
+ 33.97
1609
+
1610
+ __In stock
1611
+
1612
+ Add to basket
1613
+
1614
+ 6. __________
1615
+
1616
+ ### Giant Days, Vol. 2 ...
1617
+
1618
+ 22.11
1619
+
1620
+ __In stock
1621
+
1622
+ Add to basket
1623
+
1624
+ 7. __________
1625
+
1626
+ ### Forever and Forever: The ...
1627
+
1628
+ 29.69
1629
+
1630
+ __In stock
1631
+
1632
+ Add to basket
1633
+
1634
+ 8. __________
1635
+
1636
+ ### First and First (Five ...
1637
+
1638
+ 15.97
1639
+
1640
+ __In stock
1641
+
1642
+ Add to basket
1643
+
1644
+ 9. __________
1645
+
1646
+ ### Fifty Shades Darker (Fifty ...
1647
+
1648
+ 21.96
1649
+
1650
+ __In stock
1651
+
1652
+ Add to basket
1653
+
1654
+ 10. __________
1655
+
1656
+ ### Everydata: The Misinformation Hidden ...
1657
+
1658
+ 54.35
1659
+
1660
+ __In stock
1661
+
1662
+ Add to basket
1663
+
1664
+ 11. __________
1665
+
1666
+ ### Don't Be a Jerk: ...
1667
+
1668
+ 37.97
1669
+
1670
+ __In stock
1671
+
1672
+ Add to basket
1673
+
1674
+ 12. __________
1675
+
1676
+ ### Danganronpa Volume 1
1677
+
1678
+ 51.99
1679
+
1680
+ __In stock
1681
+
1682
+ Add to basket
1683
+
1684
+ 13. __________
1685
+
1686
+ ### Crown of Midnight (Throne ...
1687
+
1688
+ 43.29
1689
+
1690
+ __In stock
1691
+
1692
+ Add to basket
1693
+
1694
+ 14. __________
1695
+
1696
+ ### Codename Baboushka, Volume 1: ...
1697
+
1698
+ 36.72
1699
+
1700
+ __In stock
1701
+
1702
+ Add to basket
1703
+
1704
+ 15. __________
1705
+
1706
+ ### Camp Midnight
1707
+
1708
+ 17.08
1709
+
1710
+ __In stock
1711
+
1712
+ Add to basket
1713
+
1714
+ 16. __________
1715
+
1716
+ ### Call the Nurse: True ...
1717
+
1718
+ 29.14
1719
+
1720
+ __In stock
1721
+
1722
+ Add to basket
1723
+
1724
+ 17. __________
1725
+
1726
+ ### Burning
1727
+
1728
+ 28.81
1729
+
1730
+ __In stock
1731
+
1732
+ Add to basket
1733
+
1734
+ 18. __________
1735
+
1736
+ ### Bossypants
1737
+
1738
+ 49.46
1739
+
1740
+ __In stock
1741
+
1742
+ Add to basket
1743
+
1744
+ 19. __________
1745
+
1746
+ ### Bitch Planet, Vol. 1: ...
1747
+
1748
+ 37.92
1749
+
1750
+ __In stock
1751
+
1752
+ Add to basket
1753
+
1754
+ 20. __________
1755
+
1756
+ ### Avatar: The Last Airbender: ...
1757
+
1758
+ 28.09
1759
+
1760
+ __In stock
1761
+
1762
+ Add to basket
1763
+
1764
+ * previous
1765
+ * Page 6 of 50
1766
+ * next
1767
+ None
1768
+ None
1769
+ None
1770
+ None
1771
+ None
1772
+ None
1773
+ None
1774
+ None
1775
+ None
1776
+ None
1777
+ None
1778
+ None
1779
+ None
1780
+ None
1781
+ None
1782
+ None
1783
+ None
1784
+ None
1785
+ None
1786
+ None
1787
+ None
1788
+ None
1789
+ 1. __________
1790
+
1791
+ ### Algorithms to Live By: ...
1792
+
1793
+ 30.81
1794
+
1795
+ __In stock
1796
+
1797
+ Add to basket
1798
+
1799
+ 2. __________
1800
+
1801
+ ### A World of Flavor: ...
1802
+
1803
+ 42.95
1804
+
1805
+ __In stock
1806
+
1807
+ Add to basket
1808
+
1809
+ 3. __________
1810
+
1811
+ ### A Piece of Sky, ...
1812
+
1813
+ 56.76
1814
+
1815
+ __In stock
1816
+
1817
+ Add to basket
1818
+
1819
+ 4. __________
1820
+
1821
+ ### A Murder in Time
1822
+
1823
+ 16.64
1824
+
1825
+ __In stock
1826
+
1827
+ Add to basket
1828
+
1829
+ 5. __________
1830
+
1831
+ ### A Flight of Arrows ...
1832
+
1833
+ 55.53
1834
+
1835
+ __In stock
1836
+
1837
+ Add to basket
1838
+
1839
+ 6. __________
1840
+
1841
+ ### A Fierce and Subtle ...
1842
+
1843
+ 28.13
1844
+
1845
+ __In stock
1846
+
1847
+ Add to basket
1848
+
1849
+ 7. __________
1850
+
1851
+ ### A Court of Thorns ...
1852
+
1853
+ 52.37
1854
+
1855
+ __In stock
1856
+
1857
+ Add to basket
1858
+
1859
+ 8. __________
1860
+
1861
+ ### (Un)Qualified: How God Uses ...
1862
+
1863
+ 54.00
1864
+
1865
+ __In stock
1866
+
1867
+ Add to basket
1868
+
1869
+ 9. __________
1870
+
1871
+ ### You Are What You ...
1872
+
1873
+ 21.87
1874
+
1875
+ __In stock
1876
+
1877
+ Add to basket
1878
+
1879
+ 10. __________
1880
+
1881
+ ### William Shakespeare's Star Wars: ...
1882
+
1883
+ 43.30
1884
+
1885
+ __In stock
1886
+
1887
+ Add to basket
1888
+
1889
+ 11. __________
1890
+
1891
+ ### Tuesday Nights in 1980
1892
+
1893
+ 21.04
1894
+
1895
+ __In stock
1896
+
1897
+ Add to basket
1898
+
1899
+ 12. __________
1900
+
1901
+ ### Tracing Numbers on a ...
1902
+
1903
+ 41.60
1904
+
1905
+ __In stock
1906
+
1907
+ Add to basket
1908
+
1909
+ 13. __________
1910
+
1911
+ ### Throne of Glass (Throne ...
1912
+
1913
+ 35.07
1914
+
1915
+ __In stock
1916
+
1917
+ Add to basket
1918
+
1919
+ 14. __________
1920
+
1921
+ ### Thomas Jefferson and the ...
1922
+
1923
+ 59.64
1924
+
1925
+ __In stock
1926
+
1927
+ Add to basket
1928
+
1929
+ 15. __________
1930
+
1931
+ ### Thirteen Reasons Why
1932
+
1933
+ 52.72
1934
+
1935
+ __In stock
1936
+
1937
+ Add to basket
1938
+
1939
+ 16. __________
1940
+
1941
+ ### The White Cat and ...
1942
+
1943
+ 58.08
1944
+
1945
+ __In stock
1946
+
1947
+ Add to basket
1948
+
1949
+ 17. __________
1950
+
1951
+ ### The Wedding Dress
1952
+
1953
+ 24.12
1954
+
1955
+ __In stock
1956
+
1957
+ Add to basket
1958
+
1959
+ 18. __________
1960
+
1961
+ ### The Vacationers
1962
+
1963
+ 42.15
1964
+
1965
+ __In stock
1966
+
1967
+ Add to basket
1968
+
1969
+ 19. __________
1970
+
1971
+ ### The Third Wave: An ...
1972
+
1973
+ 12.61
1974
+
1975
+ __In stock
1976
+
1977
+ Add to basket
1978
+
1979
+ 20. __________
1980
+
1981
+ ### The Stranger
1982
+
1983
+ 17.44
1984
+
1985
+ __In stock
1986
+
1987
+ Add to basket
1988
+
1989
+ * previous
1990
+ * Page 7 of 50
1991
+ * next
1992
+ None
1993
+ None
1994
+ None
1995
+ None
1996
+ None
1997
+ None
1998
+ None
1999
+ None
2000
+ None
2001
+ None
2002
+ None
2003
+ None
2004
+ None
2005
+ None
2006
+ None
2007
+ None
2008
+ None
2009
+ None
2010
+ None
2011
+ None
2012
+ None
2013
+ None
2014
+ None
2015
+ None
2016
+ None
2017
+ None
2018
+ None
2019
+ 1. __________
2020
+
2021
+ ### The Shadow Hero (The ...
2022
+
2023
+ 33.14
2024
+
2025
+ __In stock
2026
+
2027
+ Add to basket
2028
+
2029
+ 2. __________
2030
+
2031
+ ### The Secret (The Secret ...
2032
+
2033
+ 27.37
2034
+
2035
+ __In stock
2036
+
2037
+ Add to basket
2038
+
2039
+ 3. __________
2040
+
2041
+ ### The Regional Office Is ...
2042
+
2043
+ 51.36
2044
+
2045
+ __In stock
2046
+
2047
+ Add to basket
2048
+
2049
+ 4. __________
2050
+
2051
+ ### The Psychopath Test: A ...
2052
+
2053
+ 36.00
2054
+
2055
+ __In stock
2056
+
2057
+ Add to basket
2058
+
2059
+ 5. __________
2060
+
2061
+ ### The Project
2062
+
2063
+ 10.65
2064
+
2065
+ __In stock
2066
+
2067
+ Add to basket
2068
+
2069
+ 6. __________
2070
+
2071
+ ### The Power of Now: ...
2072
+
2073
+ 43.54
2074
+
2075
+ __In stock
2076
+
2077
+ Add to basket
2078
+
2079
+ 7. __________
2080
+
2081
+ ### The Omnivore's Dilemma: A ...
2082
+
2083
+ 38.21
2084
+
2085
+ __In stock
2086
+
2087
+ Add to basket
2088
+
2089
+ 8. __________
2090
+
2091
+ ### The Nerdy Nummies Cookbook: ...
2092
+
2093
+ 37.34
2094
+
2095
+ __In stock
2096
+
2097
+ Add to basket
2098
+
2099
+ 9. __________
2100
+
2101
+ ### The Murder of Roger ...
2102
+
2103
+ 44.10
2104
+
2105
+ __In stock
2106
+
2107
+ Add to basket
2108
+
2109
+ 10. __________
2110
+
2111
+ ### The Mistake (Off-Campus #2)
2112
+
2113
+ 43.29
2114
+
2115
+ __In stock
2116
+
2117
+ Add to basket
2118
+
2119
+ 11. __________
2120
+
2121
+ ### The Matchmaker's Playbook (Wingmen ...
2122
+
2123
+ 55.85
2124
+
2125
+ __In stock
2126
+
2127
+ Add to basket
2128
+
2129
+ 12. __________
2130
+
2131
+ ### The Love and Lemons ...
2132
+
2133
+ 37.60
2134
+
2135
+ __In stock
2136
+
2137
+ Add to basket
2138
+
2139
+ 13. __________
2140
+
2141
+ ### The Long Shadow of ...
2142
+
2143
+ 10.97
2144
+
2145
+ __In stock
2146
+
2147
+ Add to basket
2148
+
2149
+ 14. __________
2150
+
2151
+ ### The Kite Runner
2152
+
2153
+ 41.82
2154
+
2155
+ __In stock
2156
+
2157
+ Add to basket
2158
+
2159
+ 15. __________
2160
+
2161
+ ### The House by the ...
2162
+
2163
+ 36.95
2164
+
2165
+ __In stock
2166
+
2167
+ Add to basket
2168
+
2169
+ 16. __________
2170
+
2171
+ ### The Glittering Court (The ...
2172
+
2173
+ 44.28
2174
+
2175
+ __In stock
2176
+
2177
+ Add to basket
2178
+
2179
+ 17. __________
2180
+
2181
+ ### The Girl on the ...
2182
+
2183
+ 55.02
2184
+
2185
+ __In stock
2186
+
2187
+ Add to basket
2188
+
2189
+ 18. __________
2190
+
2191
+ ### The Genius of Birds
2192
+
2193
+ 17.24
2194
+
2195
+ __In stock
2196
+
2197
+ Add to basket
2198
+
2199
+ 19. __________
2200
+
2201
+ ### The Emerald Mystery
2202
+
2203
+ 23.15
2204
+
2205
+ __In stock
2206
+
2207
+ Add to basket
2208
+
2209
+ 20. __________
2210
+
2211
+ ### The Cookies & Cups ...
2212
+
2213
+ 41.25
2214
+
2215
+ __In stock
2216
+
2217
+ Add to basket
2218
+
2219
+ * previous
2220
+ * Page 8 of 50
2221
+ * next
2222
+ None
2223
+ None
2224
+ None
2225
+ None
2226
+ None
2227
+ None
2228
+ None
2229
+ None
2230
+ None
2231
+ None
2232
+ None
2233
+ None
2234
+ None
2235
+ None
2236
+ None
2237
+ None
2238
+ None
2239
+ None
2240
+ None
2241
+ None
2242
+ None
2243
+ None
2244
+ None
2245
+ None
2246
+ None
2247
+ None
2248
+ 1. __________
2249
+
2250
+ ### The Bridge to Consciousness: ...
2251
+
2252
+ 32.00
2253
+
2254
+ __In stock
2255
+
2256
+ Add to basket
2257
+
2258
+ 2. __________
2259
+
2260
+ ### The Artist's Way: A ...
2261
+
2262
+ 38.49
2263
+
2264
+ __In stock
2265
+
2266
+ Add to basket
2267
+
2268
+ 3. __________
2269
+
2270
+ ### The Art of War
2271
+
2272
+ 33.34
2273
+
2274
+ __In stock
2275
+
2276
+ Add to basket
2277
+
2278
+ 4. __________
2279
+
2280
+ ### The Argonauts
2281
+
2282
+ 10.93
2283
+
2284
+ __In stock
2285
+
2286
+ Add to basket
2287
+
2288
+ 5. __________
2289
+
2290
+ ### The 10% Entrepreneur: Live ...
2291
+
2292
+ 27.55
2293
+
2294
+ __In stock
2295
+
2296
+ Add to basket
2297
+
2298
+ 6. __________
2299
+
2300
+ ### Suddenly in Love (Lake ...
2301
+
2302
+ 55.99
2303
+
2304
+ __In stock
2305
+
2306
+ Add to basket
2307
+
2308
+ 7. __________
2309
+
2310
+ ### Something More Than This
2311
+
2312
+ 16.24
2313
+
2314
+ __In stock
2315
+
2316
+ Add to basket
2317
+
2318
+ 8. __________
2319
+
2320
+ ### Soft Apocalypse
2321
+
2322
+ 26.12
2323
+
2324
+ __In stock
2325
+
2326
+ Add to basket
2327
+
2328
+ 9. __________
2329
+
2330
+ ### So You've Been Publicly ...
2331
+
2332
+ 12.23
2333
+
2334
+ __In stock
2335
+
2336
+ Add to basket
2337
+
2338
+ 10. __________
2339
+
2340
+ ### Shoe Dog: A Memoir ...
2341
+
2342
+ 23.99
2343
+
2344
+ __In stock
2345
+
2346
+ Add to basket
2347
+
2348
+ 11. __________
2349
+
2350
+ ### Shobu Samurai, Project Aryoku ...
2351
+
2352
+ 29.06
2353
+
2354
+ __In stock
2355
+
2356
+ Add to basket
2357
+
2358
+ 12. __________
2359
+
2360
+ ### Secrets and Lace (Fatal ...
2361
+
2362
+ 20.27
2363
+
2364
+ __In stock
2365
+
2366
+ Add to basket
2367
+
2368
+ 13. __________
2369
+
2370
+ ### Scarlett Epstein Hates It ...
2371
+
2372
+ 43.55
2373
+
2374
+ __In stock
2375
+
2376
+ Add to basket
2377
+
2378
+ 14. __________
2379
+
2380
+ ### Romero and Juliet: A ...
2381
+
2382
+ 36.94
2383
+
2384
+ __In stock
2385
+
2386
+ Add to basket
2387
+
2388
+ 15. __________
2389
+
2390
+ ### Redeeming Love
2391
+
2392
+ 20.47
2393
+
2394
+ __In stock
2395
+
2396
+ Add to basket
2397
+
2398
+ 16. __________
2399
+
2400
+ ### Poses for Artists Volume ...
2401
+
2402
+ 41.06
2403
+
2404
+ __In stock
2405
+
2406
+ Add to basket
2407
+
2408
+ 17. __________
2409
+
2410
+ ### Poems That Make Grown ...
2411
+
2412
+ 14.19
2413
+
2414
+ __In stock
2415
+
2416
+ Add to basket
2417
+
2418
+ 18. __________
2419
+
2420
+ ### Nightingale, Sing
2421
+
2422
+ 38.28
2423
+
2424
+ __In stock
2425
+
2426
+ Add to basket
2427
+
2428
+ 19. __________
2429
+
2430
+ ### Night Sky with Exit ...
2431
+
2432
+ 41.05
2433
+
2434
+ __In stock
2435
+
2436
+ Add to basket
2437
+
2438
+ 20. __________
2439
+
2440
+ ### Mrs. Houdini
2441
+
2442
+ 30.25
2443
+
2444
+ __In stock
2445
+
2446
+ Add to basket
2447
+
2448
+ * previous
2449
+ * Page 9 of 50
2450
+ * next
2451
+ None
2452
+ None
2453
+ None
2454
+ None
2455
+ None
2456
+ None
2457
+ None
2458
+ None
2459
+ None
2460
+ None
2461
+ None
2462
+ None
2463
+ None
2464
+ None
2465
+ None
2466
+ None
2467
+ None
2468
+ None
2469
+ None
2470
+ None
2471
+ None
2472
+ None
2473
+ 1. __________
2474
+
2475
+ ### Modern Romance
2476
+
2477
+ 28.26
2478
+
2479
+ __In stock
2480
+
2481
+ Add to basket
2482
+
2483
+ 2. __________
2484
+
2485
+ ### Miss Peregrines Home for ...
2486
+
2487
+ 10.76
2488
+
2489
+ __In stock
2490
+
2491
+ Add to basket
2492
+
2493
+ 3. __________
2494
+
2495
+ ### Louisa: The Extraordinary Life ...
2496
+
2497
+ 16.85
2498
+
2499
+ __In stock
2500
+
2501
+ Add to basket
2502
+
2503
+ 4. __________
2504
+
2505
+ ### Little Red
2506
+
2507
+ 13.47
2508
+
2509
+ __In stock
2510
+
2511
+ Add to basket
2512
+
2513
+ 5. __________
2514
+
2515
+ ### Library of Souls (Miss ...
2516
+
2517
+ 48.56
2518
+
2519
+ __In stock
2520
+
2521
+ Add to basket
2522
+
2523
+ 6. __________
2524
+
2525
+ ### Large Print Heart of ...
2526
+
2527
+ 19.15
2528
+
2529
+ __In stock
2530
+
2531
+ Add to basket
2532
+
2533
+ 7. __________
2534
+
2535
+ ### I Had a Nice ...
2536
+
2537
+ 57.36
2538
+
2539
+ __In stock
2540
+
2541
+ Add to basket
2542
+
2543
+ 8. __________
2544
+
2545
+ ### Hollow City (Miss Peregrines ...
2546
+
2547
+ 42.98
2548
+
2549
+ __In stock
2550
+
2551
+ Add to basket
2552
+
2553
+ 9. __________
2554
+
2555
+ ### Grumbles
2556
+
2557
+ 22.16
2558
+
2559
+ __In stock
2560
+
2561
+ Add to basket
2562
+
2563
+ 10. __________
2564
+
2565
+ ### Full Moon over Noahs ...
2566
+
2567
+ 49.43
2568
+
2569
+ __In stock
2570
+
2571
+ Add to basket
2572
+
2573
+ 11. __________
2574
+
2575
+ ### Frostbite (Vampire Academy #2)
2576
+
2577
+ 29.99
2578
+
2579
+ __In stock
2580
+
2581
+ Add to basket
2582
+
2583
+ 12. __________
2584
+
2585
+ ### Follow You Home
2586
+
2587
+ 21.36
2588
+
2589
+ __In stock
2590
+
2591
+ Add to basket
2592
+
2593
+ 13. __________
2594
+
2595
+ ### First Steps for New ...
requirements.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ beautifulsoup4==4.12.3
2
+ groq==0.11.0
3
+ html2text==2024.2.26
4
+ itemadapter==0.9.0
5
+ Requests==2.32.3
6
+ Scrapy==2.11.2
7
+ streamlit==1.37.0
webscraper/markdown_files/default.md ADDED
@@ -0,0 +1,338 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Event type
2
+
3
+ Everything
4
+
5
+ * Dance And Clubs
6
+
7
+ * Disco
8
+ * Drum And Bass
9
+ * Edm (Electronic Dance Music)
10
+ * Electro
11
+ * Electronica
12
+ * Garage
13
+ * Grime
14
+ * House
15
+ * Ibiza
16
+ * Other
17
+ * R&B
18
+ * Rap/Hip Hop
19
+ * Soul
20
+ * Techno
21
+ * Rock
22
+
23
+ * '60S
24
+ * '70S
25
+ * '80S
26
+ * Alternative/Indie
27
+ * Americana
28
+ * Blues
29
+ * Classic Rock
30
+ * Club
31
+ * Doom/Stoner Metal
32
+ * Emo/Pop Punk
33
+ * Folk
34
+ * General
35
+ * Glam
36
+ * Goth
37
+ * Hardcore
38
+ * Heritage
39
+ * Metal
40
+ * Metalcore
41
+ * New Wave
42
+ * Other Rock Music
43
+ * Post Punk
44
+ * Post Rock
45
+ * Prog Rock/Psych
46
+ * Punk/Ska
47
+ * Surfer Rock
48
+ * Tribute Band
49
+ * Pop
50
+
51
+ * '60S
52
+ * '70S
53
+ * '80S
54
+ * '90S
55
+ * Boy Band
56
+ * Club
57
+ * Girl Band
58
+ * Group
59
+ * Heritage
60
+ * Hyperpop
61
+ * Indie-Pop
62
+ * Other
63
+ * Solo Female
64
+ * Solo Male
65
+ * Tribute Band
66
+ * Other Music
67
+
68
+ * African
69
+ * Bluegrass
70
+ * Blues
71
+ * Classical
72
+ * Country
73
+ * Easy Listening
74
+ * Experimental
75
+ * Folk
76
+ * French Singers
77
+ * Funk
78
+ * Instrumental
79
+ * International Scene
80
+ * Jazz
81
+ * K Pop
82
+ * Karaoke
83
+ * Latin
84
+ * Orchestral
85
+ * Other
86
+ * Pop Rock
87
+ * Reggae
88
+ * Spoken Word
89
+ * World
90
+ * Theatre
91
+
92
+ * Ballet
93
+ * Dance
94
+ * Entertainment
95
+ * Family
96
+ * Immersive
97
+ * Musical
98
+ * Offers
99
+ * Opera
100
+ * Play
101
+ * Shakespeare
102
+ * Cinema
103
+
104
+ * Action
105
+ * Comedy
106
+ * Drama
107
+ * Family
108
+ * Film Festival
109
+ * Horror
110
+ * Other
111
+ * Romance
112
+ * Thriller
113
+ * Festival
114
+
115
+ * Canada
116
+ * Denmark
117
+ * Europe
118
+ * Food
119
+ * France
120
+ * Lifestyle
121
+ * Live Entertainment
122
+ * Music
123
+ * Netherlands
124
+ * Other
125
+ * Portugal
126
+ * Spain
127
+ * Switzerland
128
+ * United Kingdom
129
+ * United States
130
+ * Special Events
131
+
132
+ * Adult
133
+ * Agricultural
134
+ * Air Show & Military
135
+ * Art & Antiques
136
+ * Burlesque
137
+ * Business
138
+ * Childrens
139
+ * Christmas
140
+ * Drag Show
141
+ * Educational
142
+ * Fashion & Beauty
143
+ * Film & Tv
144
+ * Food & Drink
145
+ * Gaming
146
+ * Gardens
147
+ * Home & Lifestyle
148
+ * Horse Show
149
+ * Ice Skating
150
+ * In Conversation
151
+ * Magic
152
+ * Motor Events
153
+ * Online & Social Media
154
+ * Other
155
+ * Outdoor Theatre
156
+ * Podcast
157
+ * Shopping/Market
158
+ * Shows
159
+ * Travel & Outdoor
160
+ * True Crime
161
+ * Comedy
162
+
163
+ * Festival
164
+ * Improv
165
+ * Other
166
+ * Screen To Stage
167
+ * Stand-Up
168
+ * Sport
169
+
170
+ * American Football
171
+ * Athletics
172
+ * Basketball
173
+ * Boxing
174
+ * Cricket
175
+ * Darts
176
+ * Equestrian
177
+ * Fighting
178
+ * Football
179
+ * Golf
180
+ * Hockey
181
+ * Ice Hockey
182
+ * Tennis
183
+ * Motorsport
184
+ * Netball
185
+ * Martial Arts
186
+ * Other
187
+ * Polo
188
+ * Pool
189
+ * Rugby
190
+ * Snooker
191
+ * Winter Sports
192
+ * Wrestling
193
+ * Attractions
194
+
195
+ * Afternoon Tea In London
196
+ * Airport And Private Transfer
197
+ * Brit Movie & Tv Tour
198
+ * Castles
199
+ * Day Trips From London
200
+ * Family
201
+ * London Attractions
202
+ * London Bus Tour
203
+ * London By Night
204
+ * London Sightseeing Tours
205
+ * Monuments
206
+ * Museums And Exhibitions
207
+ * Out Of London Attractions
208
+ * River Cruises
209
+ * Royal London
210
+ * Seasonal (Christmas & Nye/Easter)
211
+ * Stonehenge Tours
212
+ * The London Eye
213
+ * Theme Parks
214
+ * Tours In Foreign Language
215
+ * Uk Theme Parks
216
+ * Walking And Bike Tours
217
+ * Warner Bro. Studio Tour London
218
+
219
+ Date
220
+
221
+ Anytime
222
+
223
+ Today
224
+
225
+ This Weekend
226
+
227
+ Next Weekend
228
+
229
+ Next Seven Days
230
+
231
+ Specific Dates
232
+
233
+ From
234
+
235
+ To
236
+
237
+ Location
238
+
239
+ Reset
240
+
241
+ Relevance Soonest Nearest Recently Added Alphabetical
242
+
243
+ * UK Parliament: Audio Tour
244
+ UK Parliament, London
245
+ Sat 14 Sep 2024 \- Sat 28 Dec 2024
246
+ * UK Parliament: Guided Tour
247
+ UK Parliament, London
248
+ Sat 14 Sep 2024 \- Sat 28 Dec 2024
249
+ * Big Ben Tour
250
+ UK Parliament, London
251
+ Sat 14 Sep 2024 \- Sat 21 Dec 2024
252
+ * London Zoo
253
+ London Zoo, Regents Park, London, NW1 4RY
254
+ Sat 14 Sep 2024 \- Tue 31 Dec 2024
255
+ * Brooklands Museum
256
+ Brooklands Museum, Weybridge, Surrey
257
+ Sat 14 Sep 2024 \- Wed 01 Jan 2025
258
+ * The Moonwalkers - A Journey with Tom Hanks
259
+ Lightroom, London
260
+ Sat 14 Sep 2024 \- Sun 13 Oct 2024
261
+ * Whipsnade Zoo
262
+ Whipsnade Zoo, Dunstable, LU6 2LF
263
+ Sat 14 Sep 2024 \- Tue 31 Dec 2024
264
+ * THE STATE ROOMS
265
+ Buckingham Palace, London
266
+ Sat 14 Sep 2024, 13:00 Contact venue for tickets
267
+ * The Mousetrap
268
+ St Martin's Theatre, London
269
+ Sat 14 Sep 2024 \- Sat 01 Mar 2025
270
+ * David Hockney: Bigger & Closer
271
+ Lightroom, London
272
+ Sun 15 Sep 2024 \- Sun 06 Oct 2024
273
+ * THE STATE ROOMS
274
+ Buckingham Palace, London
275
+ Sun 15 Sep 2024, 13:00 Contact venue for tickets
276
+ * THE STATE ROOMS
277
+ Buckingham Palace, London
278
+ Mon 16 Sep 2024, 13:00 Contact venue for tickets
279
+ * THE STATE ROOMS
280
+ Buckingham Palace, London
281
+ Thu 19 Sep 2024, 13:00 Sold out
282
+ * Women and Medicine in Euston and Fitzrovia Walk
283
+ The Euston Tap, London
284
+ Fri 20 Sep 2024, 12:30
285
+ * THE STATE ROOMS
286
+ Buckingham Palace, London
287
+ Fri 20 Sep 2024, 13:00 Sold out
288
+ * Quirky Westminster Walk
289
+ Fish Street Hill, Le Pain Quotidien
290
+ Fri 20 Sep 2024, 14:00
291
+ * THE STATE ROOMS
292
+ Buckingham Palace, London
293
+ Sat 21 Sep 2024, 13:00 Sold out
294
+ * Best of Blackfriars Walking Tour
295
+ Blackfriars Station, Central London
296
+ Sat 21 Sep 2024, 16:00
297
+ * THE STATE ROOMS
298
+ Buckingham Palace, London
299
+ Sun 22 Sep 2024, 13:00 Sold out
300
+ * THE STATE ROOMS
301
+ Buckingham Palace, London
302
+ Mon 23 Sep 2024, 13:00 Sold out
303
+ * THE STATE ROOMS
304
+ Buckingham Palace, London
305
+ Thu 26 Sep 2024, 13:00 Sold out
306
+ * Omar | UK's Soul Legend
307
+ Boisdale Of Canary Wharf, London
308
+ Thu 26 Sep 2024, 21:30 Artists: Omar Lye-Fook
309
+ * A Silk Road Oasis: Life in Ancient Dunhuang
310
+ British Library, London
311
+ Fri 27 Sep 2024 \- Sun 23 Feb 2025
312
+ * THE STATE ROOMS
313
+ Buckingham Palace, London
314
+ Fri 27 Sep 2024, 13:00 Sold out
315
+ * THE STATE ROOMS
316
+ Buckingham Palace, London
317
+ Sat 28 Sep 2024, 13:00 Sold out
318
+ * THE STATE ROOMS
319
+ Buckingham Palace, London
320
+ Sun 29 Sep 2024, 13:00
321
+ * Victorian Covent Garden Walking Tour
322
+ The Clermont Hotel, The Clermont Hotel
323
+ Sat 05 Oct 2024, 12:00
324
+ * Quirky Westminster Walk
325
+ Covent Garden tube station, London
326
+ Sun 06 Oct 2024, 11:00
327
+ * Secrets of Spitalfields Walk
328
+ Liverpool Street Station, London
329
+ Sun 13 Oct 2024, 12:00
330
+ * Halloween At Kew
331
+ Various venues
332
+ Fri 18 Oct 2024 \- Sun 03 Nov 2024
333
+
334
+ 1 of 2
335
+
336
+ * Next
337
+
338
+ It looks like Javascript is disabled. You will have to enable Javascript to purchase tickets.
webscraper/scrapy.cfg ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Automatically created by: scrapy startproject
2
+ #
3
+ # For more information about the [deploy] section see:
4
+ # https://scrapyd.readthedocs.io/en/latest/deploy.html
5
+
6
+ [settings]
7
+ default = webscraper.settings
8
+ shell = ipython
9
+
10
+ [deploy]
11
+ #url = http://localhost:6800/
12
+ project = webscraper
webscraper/webscraper/__init__.py ADDED
File without changes
webscraper/webscraper/__pycache__/__init__.cpython-311.pyc ADDED
Binary file (216 Bytes). View file
 
webscraper/webscraper/__pycache__/__init__.cpython-312.pyc ADDED
Binary file (186 Bytes). View file
 
webscraper/webscraper/__pycache__/items.cpython-311.pyc ADDED
Binary file (617 Bytes). View file
 
webscraper/webscraper/__pycache__/items.cpython-312.pyc ADDED
Binary file (540 Bytes). View file
 
webscraper/webscraper/__pycache__/middlewares.cpython-311.pyc ADDED
Binary file (12.1 kB). View file
 
webscraper/webscraper/__pycache__/middlewares.cpython-312.pyc ADDED
Binary file (11.3 kB). View file
 
webscraper/webscraper/__pycache__/pipelines.cpython-311.pyc ADDED
Binary file (4.33 kB). View file
 
webscraper/webscraper/__pycache__/pipelines.cpython-312.pyc ADDED
Binary file (3.77 kB). View file
 
webscraper/webscraper/__pycache__/settings.cpython-311.pyc ADDED
Binary file (1.12 kB). View file
 
webscraper/webscraper/__pycache__/settings.cpython-312.pyc ADDED
Binary file (1.21 kB). View file
 
webscraper/webscraper/items.py ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Define here the models for your scraped items
2
+ #
3
+ # See documentation in:
4
+ # https://docs.scrapy.org/en/latest/topics/items.html
5
+
6
+ import scrapy
7
+
8
+ class WebscraperItem(scrapy.Item):
9
+ # define the fields for your item here like:
10
+ # name = scrapy.Field()
11
+ url = scrapy.Field()
12
+ extracted_content = scrapy.Field()
webscraper/webscraper/markdown_files/default.md ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1. __________
2
+
3
+ ### Frankenstein
4
+
5
+ 38.00
6
+
7
+ __In stock
8
+
9
+ Add to basket
10
+
11
+ 2. __________
12
+
13
+ ### Forever Rockers (The Rocker ...
14
+
15
+ 28.80
16
+
17
+ __In stock
18
+
19
+ Add to basket
20
+
21
+ 3. __________
22
+
23
+ ### Fighting Fate (Fighting #6)
24
+
25
+ 39.24
26
+
27
+ __In stock
28
+
29
+ Add to basket
30
+
31
+ 4. __________
32
+
33
+ ### Emma
34
+
35
+ 32.93
36
+
37
+ __In stock
38
+
39
+ Add to basket
40
+
41
+ 5. __________
42
+
43
+ ### Eat, Pray, Love
44
+
45
+ 51.32
46
+
47
+ __In stock
48
+
49
+ Add to basket
50
+
51
+ 6. __________
52
+
53
+ ### Deep Under (Walker Security ...
54
+
55
+ 47.09
56
+
57
+ __In stock
58
+
59
+ Add to basket
60
+
61
+ 7. __________
62
+
63
+ ### Choosing Our Religion: The ...
64
+
65
+ 28.42
66
+
67
+ __In stock
68
+
69
+ Add to basket
70
+
71
+ 8. __________
72
+
73
+ ### Charlie and the Chocolate ...
74
+
75
+ 22.85
76
+
77
+ __In stock
78
+
79
+ Add to basket
80
+
81
+ 9. __________
82
+
83
+ ### Charity's Cross (Charles Towne ...
84
+
85
+ 41.24
86
+
87
+ __In stock
88
+
89
+ Add to basket
90
+
91
+ 10. __________
92
+
93
+ ### Bright Lines
94
+
95
+ 39.07
96
+
97
+ __In stock
98
+
99
+ Add to basket
100
+
101
+ 11. __________
102
+
103
+ ### Bridget Jones's Diary (Bridget ...
104
+
105
+ 29.82
106
+
107
+ __In stock
108
+
109
+ Add to basket
110
+
111
+ 12. __________
112
+
113
+ ### Bounty (Colorado Mountain #7)
114
+
115
+ 37.26
116
+
117
+ __In stock
118
+
119
+ Add to basket
120
+
121
+ 13. __________
122
+
123
+ ### Blood Defense (Samantha Brinkman ...
124
+
125
+ 20.30
126
+
127
+ __In stock
128
+
129
+ Add to basket
130
+
131
+ 14. __________
132
+
133
+ ### Bleach, Vol. 1: Strawberry ...
134
+
135
+ 34.65
136
+
137
+ __In stock
138
+
139
+ Add to basket
140
+
141
+ 15. __________
142
+
143
+ ### Beyond Good and Evil
144
+
145
+ 43.38
146
+
147
+ __In stock
148
+
149
+ Add to basket
150
+
151
+ 16. __________
152
+
153
+ ### Alice in Wonderland (Alice's ...
154
+
155
+ 55.53
156
+
157
+ __In stock
158
+
159
+ Add to basket
160
+
161
+ 17. __________
162
+
163
+ ### Ajin: Demi-Human, Volume 1 ...
164
+
165
+ 57.06
166
+
167
+ __In stock
168
+
169
+ Add to basket
170
+
171
+ 18. __________
172
+
173
+ ### A Spy's Devotion (The ...
174
+
175
+ 16.97
176
+
177
+ __In stock
178
+
179
+ Add to basket
180
+
181
+ 19. __________
182
+
183
+ ### 1st to Die (Women's ...
184
+
185
+ 53.98
186
+
187
+ __In stock
188
+
189
+ Add to basket
190
+
191
+ 20. __________
192
+
193
+ ### 1,000 Places to See ...
194
+
195
+ 26.08
196
+
197
+ __In stock
198
+
199
+ Add to basket
200
+
201
+ * previous
202
+ * Page 50 of 50
webscraper/webscraper/middlewares.py ADDED
@@ -0,0 +1,215 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Define here the models for your spider middleware
2
+ #
3
+ # See documentation in:
4
+ # https://docs.scrapy.org/en/latest/topics/spider-middleware.html
5
+ ## middlewares.py
6
+ from scrapy import signals
7
+ from itemadapter import is_item, ItemAdapter
8
+ from urllib.parse import urlencode
9
+ from random import randint
10
+ import requests
11
+ import base64
12
+
13
+
14
+ class WebscraperSpiderMiddleware:
15
+ # Not all methods need to be defined. If a method is not defined,
16
+ # scrapy acts as if the spider middleware does not modify the
17
+ # passed objects.
18
+
19
+ @classmethod
20
+ def from_crawler(cls, crawler):
21
+ # This method is used by Scrapy to create your spiders.
22
+ s = cls()
23
+ crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
24
+ return s
25
+
26
+ def process_spider_input(self, response, spider):
27
+ # Called for each response that goes through the spider
28
+ # middleware and into the spider.
29
+
30
+ # Should return None or raise an exception.
31
+ return None
32
+
33
+ def process_spider_output(self, response, result, spider):
34
+ # Called with the results returned from the Spider, after
35
+ # it has processed the response.
36
+
37
+ # Must return an iterable of Request, or item objects.
38
+ for i in result:
39
+ yield i
40
+
41
+ def process_spider_exception(self, response, exception, spider):
42
+ # Called when a spider or process_spider_input() method
43
+ # (from other spider middleware) raises an exception.
44
+
45
+ # Should return either None or an iterable of Request or item objects.
46
+ pass
47
+
48
+ def process_start_requests(self, start_requests, spider):
49
+ # Called with the start requests of the spider, and works
50
+ # similarly to the process_spider_output() method, except
51
+ # that it doesn’t have a response associated.
52
+
53
+ # Must return only requests (not items).
54
+ for r in start_requests:
55
+ yield r
56
+
57
+ def spider_opened(self, spider):
58
+ spider.logger.info("Spider opened: %s" % spider.name)
59
+
60
+
61
+ class WebscraperDownloaderMiddleware:
62
+ # Not all methods need to be defined. If a method is not defined,
63
+ # scrapy acts as if the downloader middleware does not modify the
64
+ # passed objects.
65
+
66
+ @classmethod
67
+ def from_crawler(cls, crawler):
68
+ # This method is used by Scrapy to create your spiders.
69
+ s = cls()
70
+ crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
71
+ return s
72
+
73
+ def process_request(self, request, spider):
74
+ # Called for each request that goes through the downloader
75
+ # middleware.
76
+
77
+ # Must either:
78
+ # - return None: continue processing this request
79
+ # - or return a Response object
80
+ # - or return a Request object
81
+ # - or raise IgnoreRequest: process_exception() methods of
82
+ # installed downloader middleware will be called
83
+ return None
84
+
85
+ def process_response(self, request, response, spider):
86
+ # Called with the response returned from the downloader.
87
+
88
+ # Must either;
89
+ # - return a Response object
90
+ # - return a Request object
91
+ # - or raise IgnoreRequest
92
+ return response
93
+
94
+ def process_exception(self, request, exception, spider):
95
+ # Called when a download handler or a process_request()
96
+ # (from other downloader middleware) raises an exception.
97
+
98
+ # Must either:
99
+ # - return None: continue processing this exception
100
+ # - return a Response object: stops process_exception() chain
101
+ # - return a Request object: stops process_exception() chain
102
+ pass
103
+
104
+ def spider_opened(self, spider):
105
+ spider.logger.info("Spider opened: %s" % spider.name)
106
+
107
+
108
+ class ScrapeOpsFakeUserAgentMiddleware:
109
+
110
+ @classmethod
111
+ def from_crawler(cls, crawler):
112
+ return cls(crawler.settings)
113
+
114
+ def __init__(self, settings):
115
+ self.scrapeops_api_key = settings.get('SCRAPEOPS_API_KEY')
116
+ self.scrapeops_endpoint = settings.get('SCRAPEOPS_FAKE_USER_AGENT_ENDPOINT', 'http://headers.scrapeops.io/v1/user-agents?')
117
+ self.scrapeops_fake_user_agents_active = settings.get('SCRAPEOPS_FAKE_USER_AGENT_ENABLED', False)
118
+ self.scrapeops_num_results = settings.get('SCRAPEOPS_NUM_RESULTS')
119
+ self.headers_list = []
120
+ self._get_user_agents_list()
121
+ self._scrapeops_fake_user_agents_enabled()
122
+
123
+ def _get_user_agents_list(self):
124
+ payload = {'api_key': self.scrapeops_api_key}
125
+ if self.scrapeops_num_results is not None:
126
+ payload['num_results'] = self.scrapeops_num_results
127
+ response = requests.get(self.scrapeops_endpoint, params=urlencode(payload))
128
+ json_response = response.json()
129
+ self.user_agents_list = json_response.get('result', [])
130
+
131
+ def _get_random_user_agent(self):
132
+ random_index = randint(0, len(self.user_agents_list) - 1)
133
+ return self.user_agents_list[random_index]
134
+
135
+ def _scrapeops_fake_user_agents_enabled(self):
136
+ if self.scrapeops_api_key is None or self.scrapeops_api_key == '' or self.scrapeops_fake_user_agents_active == False:
137
+ self.scrapeops_fake_user_agents_active = False
138
+ else:
139
+ self.scrapeops_fake_user_agents_active = True
140
+
141
+ def process_request(self, request, spider):
142
+ random_user_agent = self._get_random_user_agent()
143
+ request.headers['User-Agent'] = random_user_agent
144
+ #print("**************************User-Agent**************************")
145
+ #print(request.headers['User-Agent'])
146
+
147
+
148
+ class ScrapeOpsFakeBrowserHeaderAgentMiddleware:
149
+
150
+ @classmethod
151
+ def from_crawler(cls, crawler):
152
+ return cls(crawler.settings)
153
+
154
+ def __init__(self, settings):
155
+ self.scrapeops_api_key = settings.get('SCRAPEOPS_API_KEY')
156
+ self.scrapeops_endpoint = settings.get('SCRAPEOPS_FAKE_BROWSER_HEADER_ENDPOINT', 'http://headers.scrapeops.io/v1/browser-headers?')
157
+ self.scrapeops_fake_browser_headers_active = settings.get('SCRAPEOPS_FAKE_BROWSER_HEADER_ENABLED', False)
158
+ self.scrapeops_num_results = settings.get('SCRAPEOPS_NUM_RESULTS')
159
+ self.headers_list = []
160
+ self._get_headers_list()
161
+ self._scrapeops_fake_browser_headers_enabled()
162
+
163
+ def _get_headers_list(self):
164
+ payload = {'api_key': self.scrapeops_api_key}
165
+ if self.scrapeops_num_results is not None:
166
+ payload['num_results'] = self.scrapeops_num_results
167
+ response = requests.get(self.scrapeops_endpoint, params=urlencode(payload))
168
+ json_response = response.json()
169
+ self.headers_list = json_response.get('result', [])
170
+
171
+ def _get_random_browser_header(self):
172
+ random_index = randint(0, len(self.headers_list) - 1)
173
+ return self.headers_list[random_index]
174
+
175
+ def _scrapeops_fake_browser_headers_enabled(self):
176
+ if self.scrapeops_api_key is None or self.scrapeops_api_key == '' or self.scrapeops_fake_browser_headers_active == False:
177
+ self.scrapeops_fake_browser_headers_active = False
178
+ else:
179
+ self.scrapeops_fake_browser_headers_active = True
180
+
181
+ def process_request(self, request, spider):
182
+ random_browser_header = self._get_random_browser_header()
183
+ request.headers['upgrade-insecure-requests'] = random_browser_header['upgrade-insecure-requests']
184
+ request.headers['user-agent'] = random_browser_header['user-agent']
185
+ request.headers['accept'] = random_browser_header['accept']
186
+ request.headers['sec-ch-ua'] = random_browser_header['sec-ch-ua']
187
+ request.headers['sec-ch-ua-mobile'] = random_browser_header['sec-ch-ua-mobile']
188
+ request.headers['sec-ch-ua-platform'] = random_browser_header['sec-ch-ua-platform']
189
+ request.headers['sec-fetch-site'] = random_browser_header['sec-fetch-site']
190
+ request.headers['sec-fetch-mod'] = random_browser_header['sec-fetch-mod']
191
+ request.headers['sec-fetch-user'] = random_browser_header['sec-fetch-user']
192
+ request.headers['accept-encoding'] = random_browser_header['accept-encoding']
193
+ request.headers['accept-language'] = random_browser_header['accept-language']
194
+ #print("**************************User-Agent**************************")
195
+ #print(request.headers)
196
+
197
+
198
+ class MyProxyMiddleware(object):
199
+
200
+ @classmethod
201
+ def from_crawler(cls, crawler):
202
+ return cls(crawler.settings)
203
+
204
+ def __init__(self, settings):
205
+ self.user = settings.get('PROXY_USER')
206
+ self.password = settings.get('PROXY_PASSWORD')
207
+ self.endpoint = settings.get('PROXY_ENDPOINT')
208
+ self.port = settings.get('PROXY_PORT')
209
+
210
+ def process_request(self, request, spider):
211
+ user_credentials = '{user}:{passw}'.format(user=self.user, passw=self.password)
212
+ basic_authentication = 'Basic ' + base64.b64encode(user_credentials.encode()).decode()
213
+ host = 'http://{endpoint}:{port}'.format(endpoint=self.endpoint, port=self.port)
214
+ request.meta['proxy'] = host
215
+ request.headers['Proxy-Authorization'] = basic_authentication
webscraper/webscraper/pipelines.py ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import html2text
3
+ from bs4 import BeautifulSoup
4
+ import re
5
+
6
+ class HtmlToMarkdownPipeline:
7
+ def __init__(self):
8
+ # Initialize the HTML to Markdown converter
9
+ self.converter = html2text.HTML2Text()
10
+ self.converter.ignore_links = True
11
+ self.converter.ignore_images = True
12
+ self.converter.body_width = 0 # Prevents line wrapping for clean markdown
13
+
14
+ # Ensure the directory for saving Markdown files exists
15
+ self.output_dir = 'markdown_files'
16
+ if not os.path.exists(self.output_dir):
17
+ os.makedirs(self.output_dir)
18
+
19
+ def remove_unwanted_tags(self, html_content):
20
+ """
21
+ Remove <header>, <footer>, <script>, and <style> tags from the HTML content.
22
+ """
23
+ # Parse HTML content
24
+ soup = BeautifulSoup(html_content, 'html.parser')
25
+
26
+ # Remove <header> and <footer> tags
27
+ for tag in soup(['header', 'footer']):
28
+ tag.decompose()
29
+
30
+ # Remove <script> and <style> tags
31
+ for script_or_style in soup(["script", "style"]):
32
+ script_or_style.decompose()
33
+
34
+ # Return the cleaned HTML as a string
35
+ return str(soup)
36
+
37
+ def remove_emojis(self, text):
38
+ """
39
+ Remove all emojis from the text.
40
+ """
41
+ # Regex pattern to match emojis
42
+ emoji_pattern = re.compile(
43
+ "["
44
+ "\U0001F600-\U0001F64F" # Emoticons
45
+ "\U0001F300-\U0001F5FF" # Symbols & Pictographs
46
+ "\U0001F680-\U0001F6FF" # Transport & Map Symbols
47
+ "\U0001F700-\U0001F77F" # Alchemical Symbols
48
+ "\U0001F780-\U0001F7FF" # Geometric Shapes Extended
49
+ "\U0001F800-\U0001F8FF" # Supplemental Arrows Extended
50
+ "\U0001F900-\U0001F9FF" # Supplemental Symbols and Pictographs
51
+ "\U0001FA00-\U0001FA6F" # Chess Symbols
52
+ "\U0001FA70-\U0001FAFF" # Symbols and Pictographs Extended-A
53
+ "\U00002702-\U000027B0" # Dingbats
54
+ "\U000024C2-\U0001F251" # Enclosed Characters
55
+ "]+",
56
+ flags=re.UNICODE
57
+ )
58
+ return emoji_pattern.sub(r'', text)
59
+
60
+ def clean_markdown(self, markdown_content):
61
+ """
62
+ Clean the markdown content to ensure it's well-structured and readable.
63
+ """
64
+ # Remove leading/trailing spaces
65
+ cleaned_content = markdown_content.strip()
66
+
67
+ # Remove excessive line breaks by replacing multiple consecutive newlines with a single newline
68
+ cleaned_content = re.sub(r'\n{3,}', '\n\n', cleaned_content)
69
+
70
+ # Remove carriage return characters
71
+ cleaned_content = cleaned_content.replace('\r', '')
72
+
73
+ # Remove consecutive spaces
74
+ cleaned_content = re.sub(r' {2,}', ' ', cleaned_content)
75
+
76
+ # Remove non-ASCII characters
77
+ cleaned_content = re.sub(r'[^\x00-\x7F]+', '', cleaned_content)
78
+
79
+ return cleaned_content
80
+
81
+ def process_item(self, item, spider):
82
+ # Get the HTML content from the item
83
+ html_content = item.get('extracted_content', '')
84
+
85
+ # Remove unwanted tags from HTML content
86
+ if html_content:
87
+ html_content = self.remove_unwanted_tags(html_content)
88
+
89
+ # Remove emojis from the HTML content
90
+ html_content = self.remove_emojis(html_content)
91
+
92
+ # Convert HTML to Markdown
93
+ markdown_content = self.converter.handle(html_content)
94
+
95
+ # Clean and structure the markdown content
96
+ markdown_content = self.clean_markdown(markdown_content)
97
+
98
+ # Save Markdown content to file
99
+ title = item.get('title', 'default')
100
+ file_name = f"{title}.md"
101
+ file_path = os.path.join(self.output_dir, file_name)
102
+ with open(file_path, 'w', encoding='utf-8') as file:
103
+ file.write(markdown_content)
104
+
105
+ # Optionally, update item to include file path or Markdown content
106
+ item['extracted_content'] = markdown_content
107
+
108
+ # Return the updated item
109
+ return item
webscraper/webscraper/scraped.json ADDED
The diff for this file is too large to render. See raw diff
 
webscraper/webscraper/settings.py ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FEEDS ={'scraped.json' : {'format' : 'json'}}
2
+
3
+
4
+ #For SCRAPEOPS
5
+ SCRAPEOPS_API_KEY = '8857a1e3-3e44-428f-8809-d6028ba24f0f'
6
+ #SCRAPEOPS_FAKE_USER_AGENT_ENDPOINT = "https://headers.scrapeops.io/v1/user-agents"
7
+ SCRAPEOPS_FAKE_BROWSER_HEADER_ENDPOINT = "https://headers.scrapeops.io/v1/browser-headers"
8
+ #SCRAPEOPS_FAKE_USER_AGENT_ENABLED = True
9
+ SCRAPEOPS_FAKE_BROWSER_HEADER_ENABLED = True
10
+ SCRAPEOPS_NUM_RESULTS = 50
11
+
12
+
13
+ #For PROXY
14
+ PROXY_USER = 'your_proxy_user_here'
15
+ PROXY_PASSWORD = 'your_proxy_password_here'
16
+ PROXY_ENDPOINT = 'your_proxy_endpoint_here'
17
+ PROXY_PORT = 'your_proxy_port_here'
18
+
19
+
20
+ #User agent is one part of header
21
+ #If we want only user agent to change use ScrapeOpsFakeUserAgentMiddleware
22
+ #But if you want to change complete user agent Use ScrapeOpsFakeBrowserHeaderAgentMiddleware
23
+ #DOWNLOADER_MIDDLEWARES = {
24
+ # "webscraper.middlewares.MyProxyMiddleware": 300,
25
+ # "webscraper.middlewares.HttpProxyMiddleware": 350,
26
+ # "webscraper.middlewares.ScrapeOpsFakeUserAgentMiddleware": 400,
27
+ # "webscraper.middlewares.ScrapeOpsFakeBrowserHeaderAgentMiddleware": 400,
28
+ #}
29
+
30
+ # Obey robots.txt rules
31
+ # True - If we need to follow the rules regarding whether the website allows us to scrape
32
+ # False - If we do not want to follow the rules regarding whether the website allows us to scrape
33
+ ROBOTSTXT_OBEY = True
34
+
35
+
36
+ ITEM_PIPELINES = {
37
+ "webscraper.pipelines.HtmlToMarkdownPipeline": 300,
38
+ }
39
+
40
+
41
+ BOT_NAME = "webscraper"
42
+
43
+ SPIDER_MODULES = ["webscraper.spiders"]
44
+ NEWSPIDER_MODULE = "webscraper.spiders"
45
+
46
+ # Set settings whose default value is deprecated to a future-proof value
47
+ REQUEST_FINGERPRINTER_IMPLEMENTATION = "2.7"
48
+ TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
49
+ FEED_EXPORT_ENCODING = "utf-8"
webscraper/webscraper/spiders/__init__.py ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ # This package will contain the spiders of your Scrapy project
2
+ #
3
+ # Please refer to the documentation for information on how to create and manage
4
+ # your spiders.
webscraper/webscraper/spiders/__pycache__/__init__.cpython-311.pyc ADDED
Binary file (224 Bytes). View file
 
webscraper/webscraper/spiders/__pycache__/__init__.cpython-312.pyc ADDED
Binary file (194 Bytes). View file
 
webscraper/webscraper/spiders/__pycache__/temp.cpython-312.pyc ADDED
Binary file (2.88 kB). View file
 
webscraper/webscraper/spiders/__pycache__/websiteSpider copy.cpython-312.pyc ADDED
Binary file (1.1 kB). View file
 
webscraper/webscraper/spiders/__pycache__/websiteSpider.cpython-311.pyc ADDED
Binary file (2.16 kB). View file
 
webscraper/webscraper/spiders/__pycache__/websiteSpider.cpython-312.pyc ADDED
Binary file (1.21 kB). View file
 
webscraper/webscraper/spiders/websiteSpider.py ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import scrapy
2
+ from webscraper.items import WebscraperItem
3
+ from urllib.parse import urlparse
4
+
5
+ class WebsiteSpider(scrapy.Spider):
6
+ name = "websiteSpider"
7
+ start_urls = ["https://books.toscrape.com/"]
8
+ allowed_domains = ["books.toscrape.com"]
9
+ custom_xpath = "/html/body/div/div/div/div/section/div[2]"
10
+
11
+ custom_settings = {
12
+ 'FEEDS': {
13
+ 'scraped.json': {'format': 'json', 'overwrite': True},
14
+ }
15
+ }
16
+
17
+ def start_requests(self):
18
+ # Generate requests from the start_urls
19
+ for url in self.start_urls:
20
+ yield scrapy.Request(url=url, callback=self.parse)
21
+
22
+ def parse(self, response):
23
+ # Create an instance of WebscraperItem
24
+ web_item = WebscraperItem()
25
+
26
+ # Extract content based on the user's custom XPath
27
+ extracted_content = response.xpath(self.custom_xpath).get()
28
+
29
+ if(extracted_content):
30
+ print(extracted_content)
31
+
32
+ # Assign the content and URL to the item
33
+ web_item['url'] = response.url
34
+ web_item['extracted_content'] = extracted_content
35
+
36
+ # Yield the item to the Scrapy pipeline
37
+ yield web_item
38
+
39
+ # Extract and follow links to other pages on the website
40
+ for href in response.xpath('//a/@href').extract():
41
+ # Build the absolute URL
42
+ url = response.urljoin(href)
43
+ yield scrapy.Request(url, callback=self.parse)